Linux
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))
當伺服器位於您配置的 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 是啟用您的工作主機的原因,那麼您的新主機可能位於不同的子網或不廣播它的名稱。