我需要在工作中登录多个服务器才能完成工作。我厌倦了输入要访问的服务器的 FQDN。我正在我们自己的专用网络上通过 ssh 登录/注销。我 99% 确定它在我们自己的专用网络上,b/c 所有服务器都有 ip addr 10.xyz 有没有办法仅使用主机名而不是域名来 ssh 到服务器?
我们在多个国家/地区设有服务器。我们的服务器命名方式很长。其命名如下:
hostname.country.domainname.com
我正在输入腕管
ssh [email protected]
...每次我访问我们的一台服务器时。如果我在美国并且尝试访问位于美国的另一台主机,我只需输入即可ssh me@hostname2
正常连接。但是,如果我在美国并尝试连接到英国的服务器,我将无法键入并连接到.ssh [email protected]
hostname3
我所做的解决方法是在 ~/.ssh/config 文件中为某些服务器设置一个别名。但是,我认为将 1000 多个服务器添加到该文件中是不可行的。我已经添加了 20 多台服务器,我的同事认为我疯了,尽管我认为他们在 ssh 周围输入 FQDN 很疯狂。
有没有一种简单的方法可以让我们设置一些东西,这样我们就不必每次都输入我们的domainname.com?
答案1
%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
(好吧,很明显,在它对我来说不是有效的主机名之前我收到了一个错误!)
所以现在每个国家/地区只需要一条规则。
答案2
您可以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
则需要增加它。
答案3
如果你添加
search domainname.com
到/etc/resolv.conf
,并使用hostname.country
,ssh
(以及其他网络程序,就此而言)将自动domainname.com
为您附加1。
我认为将不同国家/地区的域添加到您的search
路径中不是一个好主意,因为如果两个不同国家/地区的两台服务器共享相同的主机名,您可能会出现意外行为2
我相信这种方法比更改配置更好,ssh
因为hostname.country
无论您使用什么程序(telnet
VNC,...),这都可以解决问题。
1domainname.com
更准确地说,如果无法hostname.country
自行解析,则会追加。
2在这种情况下,hostname
将解析为路径中首先列出域的国家/地区的服务器search
。