为什么SSH不parsing这个主机名?

当我尝试SSH到名为storage的networking上的主机时,我得到一个DNSparsing失败:

 $ ssh storage ssh: Could not resolve hostname storage: Name or service not known 

但是,当我与主机查询DNS,它的作品

 $ host storage storage has address 192.168.20.103 

host如何findIP但ssh不能?

sshhost在完全不同的path下parsing名称,所以有时候它们会产生不同的结果并不奇怪,特别是当要parsing的名称不是FQDN时(因此build议在任何地方使用FQDN)。

你没有提到你的操作系统和你的系统configuration,所以我必须保持一般,关注Linux:MacOS的细节有些不同,Windows更多,但是一般的概念是一样的。

  • host查询DNS,所以基本上它会在/etc/resolv.conf查找,并查询在那里列出的服务器,如果主机名尚未完全限定,可能会附加一个域名。 它忽略了其他所有可能的来源,但要注意,现在很多系统运行本地cachingDNS服务器(通常是dnsmasq ),它在查询其他DNS服务器之前读取/etc/hosts和其他源,因此如果host查询本地服务器, /etc/hosts可以慢慢进入。

  • ssh遵循自己的道路。 我将描述Linux下的openssh ,其他实现不同。 首先查找在configuration文件(系统范围的/etc/ssh/ssh_config和per- /etc/ssh/ssh_config ~/.ssh/config )中定义的主机昵称 ,然后按照/etc/nsswitch.conf hosts: /etc/nsswitch.conf 。 说这是这样的:

     hosts: files dns 

    这意味着:查看/etc/hosts然后查询DNS(再次/etc/resolv.conf )。 其他可能的来源是过时的nisnetinfo服务,LDAP,活动目录,您将其命名。

要debugging你的特定情况,你应该遵循你的ssh实现的path,并找出它卡住的地方。