为什么SSH无法解析此主机名?


12

当我尝试SSH到名为的网络上的主机时storage,出现DNS解析失败:

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

但是当我用主机查询DNS时,它可以工作

$ host storage
storage has address 192.168.20.103

如何host找到IP但找不到IP ssh


14
开始养成在任何地方都使用FQDN的习惯。如果这是您遇到的第一个问题,那么您非常幸运。这些可能很难找到,这不会是您的最后一次。提示:这storage是Internet上的实时顶级域名。
迈克尔·汉普顿

您可以“ ssh”到192.168.20.103吗?
IvanGoneKrazy

2
您在哪里定义了192.168.20.103的主机名?/ etc / hosts?
孤儿

3
键入FQDN很痛苦。另一方面,将.ssh / config中的“ storage”别名为“ storage.mydomain.com”非常方便。
pjc50 '17

1
我键入@ pjc50 sto,然后按Tab键。
迈克尔·汉普顿

Answers:


28

sshhost按照完全不同的路径解析名称,因此有时会产生不同的结果也就不足为奇了,尤其是当解析的名称不是FQDN时(因此建议在各处使用FQDN)。

您没有提到任何有关您的操作系统和系统配置的信息,因此我必须保持通用性,并着眼于Linux:MacOS的细节有所不同,Windows甚至更多,但总体概念是相同的。

  • host查询DNS,因此基本上它会/etc/resolv.conf查询并查询那里列出的服务器,如果主机名尚未完全限定,则可能会附加一个域名。它会忽略所有其他可能的来源,但是要注意,这些天很多系统都在运行本地缓存DNS服务器(通常是dnsmasq),该/etc/hostsDNS服务器在查询其他DNS服务器之前会读取其他来源,因此,如果host查询该本地服务器,则可能会产生来自该缓存的信息/etc/hosts

  • ssh遵循自己的道路。我将描述opensshLinux下的功能,其他实现方式也有所不同。首先,它会在配置文件(系统范围内和每个用户)中查找定义的主机昵称,然后按指令中指定的顺序搜索其他来源。说是这样的:/etc/ssh/ssh_config~/.ssh/confighosts:/etc/nsswitch.conf

    hosts: files dns
    

    这意味着:查找/etc/hosts,然后/etc/resolv.conf再次查询DNS 。其他可能的来源是过时nisnetinfo服务,LDAP,Active Directory,则他们的名字。

要调试您的特殊情况,您应该遵循以下实现的路径,ssh并找出问题所在。


6
ltrace / strace可以给您提示ssh实际上是如何尝试解析域的……并且最接近于OS的方式,命令行dns工具可能已被使用。
rackandboneman '17

/etc/nsswitch.conf对阅读的建议hosts: files dns对我有用。有趣的是,过去几周我与Raspian Jessie建立了几台Raspberry Pi,他们都需要进行此更改。
Patrick Tucci
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.