Centos

OpenSSH / NSS 如何確定用於具有多個 DNS 條目的主機名的地址?

  • June 2, 2021

假設我有一些具有多個地址的設備(由於 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實名關鍵字可以進入HostMatch阻塞。問題是,我不知道如何在不複製 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.

引用自:https://serverfault.com/questions/1065346