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

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

当我尝试通过 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

sshhost按照完全不同的路径解析名称,因此它们有时会产生不同的结果也就不足为奇了,尤其是当要解析的名称不是 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并找出它卡住的地方。

相关内容