我需要在工作时登录到多台服务器才能完成工作。我已经厌倦了键入要访问的服务器的 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?
Ste*_*ris 18
您可以通配符并%h
在您的配置中使用
例如
Host *.eng
Hostname %h.domainname.com
Run Code Online (Sandbox Code Playgroud)
现在,当您这样做时,ssh foo.eng
它会尝试连接到foo.eng.domainname.com
.
您也可以向此配置添加其他选项;例如强制用户名
Host *.eng
Hostname %h.domainname.com
User me
Run Code Online (Sandbox Code Playgroud)
现在,当您这样做时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
Run Code Online (Sandbox Code Playgroud)
(好吧,显然在它对我来说不是有效主机名之前我收到了一个错误!)
所以现在每个国家只需要一个规则。
小智 9
您可以CanonicalDomains
在 ssh 配置中使用该选项。
将以下内容添加到您的 ssh 配置文件将使 ssh 尝试附加domainname.com
到名称中最多包含 1 个点的任何主机:
CanonicalizeHostname yes
CanonicalDomains domainname.com
Run Code Online (Sandbox Code Playgroud)
使用此配置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
情况,则需要增加它。
如果添加
search domainname.com
Run Code Online (Sandbox Code Playgroud)
to /etc/resolv.conf
, and use hostname.country
, ssh
(以及其他网络程序,就此而言)将自动domainname.com
为您附加1。
我认为将不同的国家/地区域添加到您的search
路径中不是一个好主意,因为如果两个不同国家/地区的两台服务器共享相同的主机名,您可能会出现意外行为2
我相信这种方法比更改ssh
配置更好,因为hostname.country
无论您使用什么程序(telnet
,VNC,...),这都可以解决。
1更准确地说,domainname.com
如果它不能自行解决,它将追加hostname.country
。
2在这种情况下,hostname
将解析为search
路径中首先列出域的国家/地区的服务器。