假设我有一些具有多个地址的设备(由于 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 不是静态的 - 如果可能的话,我想通过名称查找来做到这一点。
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
。或者,为该主机添加一个额外的短名称到 DNS 中,只有正确的 IP,所以my-weird-AD-device-2
.