当我尝试通过 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但是查不到怎么办ssh
?
答案1
ssh
并host
按照完全不同的路径解析名称,因此它们有时会产生不同的结果也就不足为奇了,尤其是当要解析的名称不是 FQDN 时(因此建议在任何地方都使用 FQDN。)
您没有提到有关您的操作系统和系统配置的任何信息,因此我必须保持一般性,关注 Linux:MacOS 的细节有些不同,Windows 则有所不同,但一般概念是相同的。
host
查询 DNS,因此基本上它会查找/etc/resolv.conf
并查询其中列出的服务器,如果主机名尚未完全限定,则可能附加域名。它会忽略所有其他可能的来源,但请注意,如今许多系统都运行本地缓存 DNS 服务器(通常是dnsmasq
),它会/etc/hosts
在查询其他 DNS 服务器之前读取和其他来源,因此如果host
查询该本地服务器,则结果/etc/hosts
可能会悄悄出现。ssh
遵循自己的路径。我将描述openssh
在 Linux 下执行的操作,其他实现有所不同。首先,它会查找主机昵称在配置文件中定义(系统范围/etc/ssh/ssh_config
和每个用户),然后按照指令中~/.ssh/config
指定的顺序搜索其他源。假设它是这样的:hosts:
/etc/nsswitch.conf
hosts: files dns
这意味着:查看
/etc/hosts
然后查询 DNS(/etc/resolv.conf
再次)。其他可能的来源是过时的nis
服务netinfo
、LDAP、活动目录,您可以随意命名。
要调试您的特定情况,您应该遵循您的实现所遵循的路径ssh
并找出它卡住的地方。