Linux

ssh 如何發現網路上的主機名?

  • July 22, 2013

我們在公司網路上有一個名為 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))

當伺服器位於您配置的 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) 之間進行自動轉換。

OpenSSH 客戶端使用作業系統提供的標準DNS解析器將主機名解析為 IP 地址。

中的hosts配置/etc/nsswitch.conf配置了解析主機時應該查看的內容和順序。

通常大多數查找將由dns配置在/etc/resolv.conf. 您可能需要聯繫管理nameserver記錄的人員/etc/resolv.conf並要求他們為您配置主機名/IP,在您的情況下 127.0.1.1 似乎是您自己。如果您有動態 DHCP IP 地址,這可能取決於您的設置。

如果mdns或多播 DNS 是啟用您的工作主機的原因,那麼您的新主機可能位於不同的子網或不廣播它的名稱。

引用自:https://unix.stackexchange.com/questions/83957