![如果 host_keys 相同,为什么连接时 SSH 主机密钥不同?](https://linux22.com/image/50967/%E5%A6%82%E6%9E%9C%20host_keys%20%E7%9B%B8%E5%90%8C%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BF%9E%E6%8E%A5%E6%97%B6%20SSH%20%E4%B8%BB%E6%9C%BA%E5%AF%86%E9%92%A5%E4%B8%8D%E5%90%8C%EF%BC%9F.png)
有 3 台机器:A(从我连接到 B 和 C 的地方)、B 和 C。B
和 C 具有相同的 SSHD 主机密钥(它们已被复制,因此它们 100% 相同,SSHD 也已重新启动) ,相同的 sshd_config 文件)。
在 C 上,known_hosts 文件如下所示:
C:~/.ssh # grep B *
C:~/.ssh # grep A *
known_hosts:ssh-rsa xxxx...xxxx
C:~/.ssh #
当我们尝试从 C 连接到 A 时,“A”会提供它的 RSA 主机密钥。
当我们尝试从 C 连接到 B 时,“B”会提供它的 ECDSA 主机密钥。
问题:为什么? “A”和“B”服务器应该同时提供它们的 RSA SSHD 主机密钥,这不是合乎逻辑的吗?
答案1
首次学习主机密钥时,首选 ECDH/ECDSA 密钥。由于主机 C 已经知道主机 A 的 RSA 密钥,因此它会继续使用该密钥。但由于主机 C 对主机 B 的密钥一无所知,因此使用 ECDH/ECDSA。
(我参考了5.7 的发行说明,当 ECDH/ECDSA 引入时)。
我收到的问题: 两把钥匙都需要吗? 是的。并非所有 SSH 安装都支持 ECDSA,因此您需要 RSA。(例如,putty 尚未支持 ECDSA) 如果我只有 ECDSA 会怎样? 取决于谁试图联系您。如果他们支持 ECDSA,那么一切都会按预期进行。如果他们不这样做,你就会遭遇某种失败。 哪一个更好? 我个人不知道。 ECDSA 需要较少的马力,因此我发现它在较旧的硬件上更加敏捷。由于 OpenSSH 比 RSA 更喜欢它,我猜开发人员认为 ECDSA 更好。
答案2
您尝试连接的服务器是否具有相同/etc/ssh/sshd_config
和/或 OpenSSH(和 OpenSSL)版本(有关相同配置的位和您连接到的位置似乎有点矛盾)? ECDH/ECDSA 是在 OpenSSH 5.7p1 中引入的,因此如果一台服务器较旧,它将忽略密钥文件。