是否可以为同一个 IP 允许多个 SSH 主机密钥?

n.s*_*.st 5 ssh failover

我有一个脚本需要连接到高可用性集群的当前活动头。

集群中的每个节点都有固定的主机名和 IP 地址。
当前头部还具有“虚拟IP”。在切换或故障转移的情况下,另一个节点配置“虚拟 IP”并开始充当头部。

我可以将我的脚本指向虚拟 IP 吗?ssh当集群将虚拟 IP 移动到不同的节点时,不会抱怨主机密钥不匹配吗?

n.s*_*.st 8

是的,这是可能的。

sshd(8)(来自 OpenSSH)指定known_host文件的格式(在 部分SSH_KNOWN_HOSTS FILE FORMAT):

执行主机认证时,如果任何匹配的行具有正确的密钥,则接受认证;[…]

允许(但不推荐)为相同的名称使用多行或不同的主机密钥。 当来自不同域的短形式的主机名放入文件时,这将不可避免地发生。这些文件可能包含冲突信息;如果可以从任一文件中找到有效信息,则接受身份验证。

因此,您只需将两个 HA 头的主机密钥添加到您的~/.ssh/known_hosts/etc/ssh/ssh_known_hosts

203.0.113.50 ssh-rsa AAAAB3NzaC1yc2…6Yh5sHpkyIZvXLB
203.0.113.50 ssh-rsa AAAAB3NzaC1yc2…R0RNVnMB6C4plFr
Run Code Online (Sandbox Code Playgroud)

并且ssh会毫无怨言地连接到他们两个。


小智 6

是的,第一个答案是正确的。

但请注意,自版本 8.5 起,OpenSSH 客户端UpdateHostKeys默认启用 ssh_config 选项,启用该选项后,该解决方案将不再有效,因为客户端会自动删除连接的主机不具有的所有主机密钥(例如,您有一个服务 IP 浮动在两台主机,并且每台主机都有自己的主机密钥)来自客户端的known_hosts 文件。

为了防止这种情况,您需要UpdateHostKeys no在客户端的~/.ssh/config文件中进行设置以恢复旧的行为。