假设我有一些具有多个地址的设备,如下所示(由于 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 不是静态的 - 如果可能的话,我想通过名称查找来完成此操作。
答案1
OpenSSH / NSS 如何确定具有多个 DNS 条目的主机名使用的地址?
获取地址信息() libc 名称解析器。每个地址解析都会尝试,请参阅ssh连接
ssh_config
有时可用作粗略的名称解析器,因为HostName
真实名称关键字可能会被忽略Host
或Match
阻止。问题是,我不知道如何在不复制 IP 地址的情况下修改这些内容。它的功能不足以以任何你喜欢的方式重写名称。
glibc 允许通过 gai.conf 影响 getaddrinfo 排序顺序。这不是 ssh 客户端配置,它会影响 glibc 名称解析以及系统上的几乎所有软件。
多个同名的 DNS 记录,只有其中一个可以连接,这会导致问题。更改 DNS,以便有一个可用于 SSH 的名称。例如,重命名其中一个区域,使全名独一无二,例如my-weird-AD-device.zone.company.com
。或者,为该主机的 DNS 添加一个额外的短名称,只有正确的 IP,所以my-weird-AD-device-2
。