ssh 如何发现网络上的主机名?

ssh 如何发现网络上的主机名?

我们在公司网络上有一台名为 serverA 的服务器,如果我输入ssh serverA,它会将我的 PC 连接到该服务器,即使我的 中没有该服务器的条目/etc/hosts,但我曾经有另一台 PC,我必须在其中设置手动进行此操作/etc/hosts。那么,ssh 如何发现网络上的主机名,以及如何确保它有效? (我提到的这两台机器都运行 Kubuntu Linux,较旧的一台运行 12.10,较新的一台运行 13.04。)

我有以下内容/etc/resolv.conf

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1
search mycompany.com

监听端口53的进程:

sudo ss -ulnp | grep 53
#UNCONN     0      0                         *:5353                     *:*      users:(("avahi-daemon",937,12))
#UNCONN     0      0                 127.0.1.1:53                       *:*      users:(("dnsmasq",1781,4))
#UNCONN     0      0                        :::5353                    :::*      users:(("avahi-daemon",937,13))

答案1

OpenSSH客户端使用标准域名系统操作系统提供的解析器,用于将主机名解析为 IP 地址。

配置hosts/etc/nsswitch.conf配置解析主机时应查看的内容以及按什么顺序。

dns通常大多数查找将由配置的解析器完成/etc/resolv.conf。您可能需要联系管理员nameserver/etc/resolv.conf并要求他们为您配置主机名/IP,在您的情况下,127.0.1.1 似乎就是您自己。如果您有动态 DHCP IP 地址,则这可能无法实现,具体取决于您的设置。

如果mdns或多播 DNS 是启用您的工作主机的原因,则您的新主机可能位于不同的子网上或不广播其名称。

答案2

当服务器位于您配置的 DNS 搜索域内时,就会发生这种情况。

例如,我当前的搜索域是 example.com:

$ grep ^search /etc/resolv.conf
search example.com

我现在可以透明地执行以下操作:

$ ping foo.example.com
PING foo.example.com (127.0.0.1) 56(84) bytes of data.
^C
$ ping foo
PING foo.example.com (127.0.0.1) 56(84) bytes of data.
^C

搜索域允许在计算机名称和完全限定域名 (FQDN) 之间进行自动转换。

相关内容