OpenSSH / NSS 如何确定具有多个 DNS 条目的主机名使用的地址?

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 不是静态的 - 如果可能的话,我想通过名称查找来完成此操作。

答案1

OpenSSH / NSS 如何确定具有多个 DNS 条目的主机名使用的地址?

获取地址信息() libc 名称解析器。每个地址解析都会尝试,请参阅ssh连接

ssh_config有时可用作粗略的名称解析器,因为HostName真实名称关键字可能会被忽略HostMatch阻止。问题是,我不知道如何在不复制 IP 地址的情况下修改这些内容。它的功能不足以以任何你喜欢的方式重写名称。

glibc 允许通过 gai.conf 影响 getaddrinfo 排序顺序。这不是 ssh 客户端配置,它会影响 glibc 名称解析以及系统上的几乎所有软件。

多个同名的 DNS 记录,只有其中一个可以连接,这会导致问题。更改 DNS,以便有一个可用于 SSH 的名称。例如,重命名其中一个区域,使全名独一无二,例如my-weird-AD-device.zone.company.com。或者,为该主机的 DNS 添加一个额外的短名称,只有正确的 IP,所以my-weird-AD-device-2

相关内容