jld*_*ger 18 domain-name-system ssh
当我尝试通过 SSH 连接到名为 的网络上的主机时storage
,出现 DNS 解析失败:
$ ssh storage
ssh: Could not resolve hostname storage: Name or service not known
Run Code Online (Sandbox Code Playgroud)
但是当我用主机查询 DNS 时,它可以工作
$ host storage
storage has address 192.168.20.103
Run Code Online (Sandbox Code Playgroud)
它是如何host
能找到IP,但ssh
不能?
小智 35
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
Run Code Online (Sandbox Code Playgroud)
这意味着:查看/etc/hosts
然后查询 DNS(/etc/resolv.conf
再次)。其他可能的来源是过时的nis
和netinfo
服务、LDAP、活动目录,您可以命名它们。
要调试您的特定情况,您应该遵循您的实现路径ssh
并找出它卡住的地方。
归档时间: |
|
查看次数: |
38749 次 |
最近记录: |