那么如何通过 SSH 连接到具有相同 IP 的两台不同的机器?

那么如何通过 SSH 连接到具有相同 IP 的两台不同的机器?

我有两个类似的 Web 应用部署,每个部署都在具有私有 IP 地址的独立虚拟网络上。两个部署的虚拟机均位于 10.0.4.4。

我可以通过 VPN 从我的开发机器进入任一网络并通过 SSH 连接到虚拟机,但是当我切换网络时,SSH 会因主机拥有不同的密钥而引发骚动。

我可以针对单个主机名配置多个密钥签名以避免这种情况吗?建议使用哪种方式连接具有相同 IP 的不同机器?

答案1

SSH 检查known_hosts此主机的所有条目。如果全部其中大部分都不匹配,包括通常的情况全部存在单一入口,那么 SSH 将会抱怨。

如果任何其中匹配 SSH 主机检查成功。

man sshdSSH_KNOWN_HOSTS 文件格式:

执行主机身份验证时,如果任何匹配的行具有正确的密钥,则认证被接受;要么是完全匹配的密钥,要么是签署该证书的认证机构的密钥(如果服务器已经提供了证书进行认证)。

[...]

允许(但不建议)为同一个名称设置多行或不同的主机密钥。当文件中放入来自不同域的主机名的短格式时,这种情况不可避免地会发生。文件可能包含冲突的信息;如果可以从任一文件中找到有效信息,则身份验证被接受。

一种(不太)常见的用途是,SSH 服务器通常通过 VIP 在高可用性环境中用作 SFTP 服务器:当从一个节点到另一个节点发生故障转移时,主机身份验证可能会发生变化。

可以两次使用ssh-keyscan 10.0.4.4可能附加选项(例如-H用于散列隐私的选项):在每个不同的虚拟机上一次,检索所有可能的主机密钥并将它们或其中一些附加到~/.ssh/known_hosts

然后就不会再发生身份验证错误,直到尝试访问具有相同地址的第 3 个不相关节点。

答案2

您无法识别开发机器的操作系统,但这应该适用于 Linux 或 Mac 上的 openSSH。

从命令行

ssh -o StrictHostKeyChecking=no 10.0.4.4

或者使用以下行设置 ~/.ssh/config

Host 10.0.4.4
StrictHostKeyChecking=no

如果您控制虚拟机并且它们是 Linux,则可以将所有密钥文件/etc/ssh/从一台虚拟机复制到另一台虚拟机,然后重新启动sshd。这将提供相同的主机密钥。

相关内容