如何通过不带域名的主机名在内部SSH服务器?


10

我需要在工作中登录多个服务器才能完成工作。我已经厌倦了键入要访问的服务器的FQDN。我正在通过ssh在我们自己的专用网络上登录/注销。我99%确信它位于我们自己的专用网络b / c上,所有服务器都具有ip addr 10.xyz。有没有办法将ssh转换为仅包含主机名而不包含域名的服务器?

我们在多个国家/地区设有服务器。我们的服务器命名方式很长。它的名称如下:

hostname.country.domainname.com

我正在输入腕管 ssh me@hostname1.country.domainname.com

...每次我访问我们的一台服务器时。如果我在美国,并且尝试访问在美国的另一台主机,则只需输入即可,ssh me@hostname2并且连接正常。但是,如果我在美国并尝试连接到英国的服务器,则无法键入ssh me@hostname3.eng并连接到hostname3

我所做的解决方法是在〜/ .ssh / config文件中为某些服务器设置别名。但是,我认为在该文件中添加1000多个服务器是不可行的。我已经添加了20多个服务器,我的同事们认为我很疯狂,尽管我认为他们在四处寻找时输入FQDN感到很疯狂。

是否有一种简单的方法可以使我们进行设置,以使我们不必每次都键入domainname.com?

Answers:


18

您可以%h在配置中使用通配符并使用

例如

Host *.eng
  Hostname %h.domainname.com

现在,您ssh foo.eng将尝试连接到foo.eng.domainname.com

您也可以在此配置中添加其他选项。例如,强制用户名

Host *.eng
  Hostname %h.domainname.com
  User me

现在,当您执行ssh foo.eng此操作时,它将尝试以foo.eng.domainname.com用户身份连接me

% ssh foo.eng
ssh: Could not resolve hostname foo.eng.domainname.com: Name or service not known

(好吧,很明显,在我得到的主机名无效之前,我会收到一条错误消息!)

因此,现在每个国家/地区只需要一个规则。


我的第一个念头是DNS别名,第二个念头是hosts文件,但是我错过了多个服务器。这个解决方案看起来很棒。什么配置可以获取您已发布的行?
Xalorous

这可以解决,$HOME/.ssh/config或者您可以在整个系统中使用它/etc/ssh/ssh_config
Stephen Harris

可以用user@*.eng吗?
Xalorous

3
使用我写的规则,您可以做到ssh foobar@somewhere.eng,它将按预期运行。这一切都是重写主机名组件。它甚至会一起工作scpsftp等。
史蒂芬·哈里斯

9

如果添加

search domainname.com

/etc/resolv.conf和使用hostname.countryssh(和其他网络程序,对于这个问题),就可以自动补齐domainname.com为你1

我不认为将不同的国家/地区域名添加到您的search路径中不是一个好主意,因为如果两个不同国家/地区的两个服务器共享相同的主机名,则可能会出现意外行为2

我相信这种方法比更改ssh配置更好,因为hostname.country无论您使用什么程序(telnet,VNC,...),它都可以解决。

看到 resolv.conf(5)


1更准确地说,domainname.com如果无法自行解决,它将追加hostname.country

2在这种情况下,hostname将解析到search路径中首先列出其域的国家中的服务器。


2
顺便说一句,您也可以通过env变量LOCALDOMAIN以非root用户和每个进程的身份执行此操作。man resolv.conf
rudimeier

这可以解决SSH主机的问题,但是如果您使用的是GSS / Kerberos,则名称将不匹配,并且身份验证将失败。
尼克T

7

您可以CanonicalDomains在ssh配置中使用该选项。

在ssh配置文件中添加以下内容将使ssh尝试追加domainname.com到名称中最多包含1个点的任何主机:

CanonicalizeHostname yes
CanonicalDomains domainname.com

使用此配置时,ssh foo.eng将首先尝试foo.eng.domainname.com,然后回退到foo.eng找不到主机的情况。同样,ssh github.com将首先尝试github.com.domainname.com,因此,如果要连接到GitHub,则DNS服务器不应返回不存在主机的记录。

CanonicalizeMaxDots可用于控制SSH认为完全合格的,且不添加之前多少个点可以在主机名出现domainname.com。它默认为1,这对于您当前使用的方案来说已经足够了,但是如果您遇到类似问题hostname.city.country,则需要将其增加。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.