如何在没有域名的情况下通过主机名内部 ssh 到服务器?

如何在没有域名的情况下通过主机名内部 ssh 到服务器?

我需要在工作中登录多个服务器才能完成工作。我厌倦了输入要访问的服务器的 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.comme

% 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.countryssh(以及其他网络程序,就此而言)将自动domainname.com为您附加1

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

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

resolv.conf(5)


1domainname.com更准确地说,如果无法hostname.country自行解析,则会追加。

2在这种情况下,hostname将解析为路径中首先列出域的国家/地区的服务器search

相关内容