Centos
OpenSSH / NSS 如何確定用於具有多個 DNS 條目的主機名的地址?
假設我有一些具有多個地址的設備(由於 AD 和 VMWare NAT 名稱解析的某種組合,但這並不密切):
[centos@localhost ~]$ getent hosts my-weird-AD-device.company.com 192.168.1.10 my-weird-AD-device.company.com 192.168.4.13 my-weird-AD-device.company.com
我有路由到的地址是
192.168.1.10
,來自與 相同網段上的設備192.168.4.13
。如果我嘗試直接 SSH 到
192.168.1.10
,一切正常,但通過主機名SSH失敗,因為它嘗試連接到192.168.4.13
.... debug2: resolving "my-weird-ad-device.company.com" port 22 debug1: Connecting to my-weird-ad-device.company.com [192.168.4.13] port 22.
我可以從 SSH 客戶端以某種方式控制這種行為嗎?我不想將 IP 硬編碼到
~/.ssh/config
或者/etc/hosts
因為工作 IP 不是靜態的 - 如果可能的話,我想通過名稱查找來做到這一點。
OpenSSH / NSS 如何確定用於具有多個 DNS 條目的主機名的地址?
getaddrinfo() libc 名稱解析器。嘗試解析的每個地址,請參閱sshconnect.c
ssh_config
有時作為粗略的名稱解析器很有用,因為HostName
實名關鍵字可以進入Host
或Match
阻塞。問題是,我不知道如何在不複製 IP 地址的情況下修改這些內容。以任何你喜歡的方式重寫名稱是不夠強大的。glibc 允許通過 gai.conf 影響 getaddrinfo 排序順序。這不是 ssh 客戶端配置,它會影響 glibc 名稱解析,以及系統上的幾乎所有軟體。
多個同名的 DNS 記錄,只有一個可以連接,導致問題。更改 DNS,以便有一個可用於 SSH 的名稱。例如,重命名這些區域之一,使其全名是 unqiue,例如
my-weird-AD-device.zone.company.com
。或者,為僅具有正確 IP 的主機添加一個附加短名稱到 DNS,因此my-weird-AD-device-2
.