在最近从 Debian 11 升级的 Debian 12 Bookworm(运行 OpenSSH_9.2)上, 默认情况下仅可用rsa-sha2-512、rsa-sha2-256服务器主机密钥算法。sshd_config 中的设置HostKeyAlgorithms +additional-algorithm-to-use
(本身非常基本)仅允许添加ssh-rsa而不允许添加其他。HostKeyAlgorithms 的手册页列出了以下默认值(我希望开箱即用):
- [电子邮件受保护],
- [电子邮件受保护],
- [电子邮件受保护],
- [电子邮件受保护],
- [电子邮件受保护],
- [电子邮件受保护],
- [电子邮件受保护],
- [电子邮件受保护],
- ssh-ed25519,
- ECDSA-SHA2-NISTP256,ECDSA-SHA2-NISTP384,ECDSA-SHA2-NISTP521,
- [电子邮件受保护],
- [电子邮件受保护],
- rsa-sha2-512,rsa-sha2-256
ssh -Q HostKeyAlgorithms
可用算法的查询返回:
- ssh-ed25519
- [电子邮件受保护]
- [电子邮件受保护]
- [电子邮件受保护]
- ECDSA-SHA2-Nistp256
- [电子邮件受保护]
- ECDSA-SHA2-NISTP384
- [电子邮件受保护]
- ECDSA-SHA2-nistp521
- [电子邮件受保护]
- [电子邮件受保护]
- [电子邮件受保护]
- [电子邮件受保护]
- ssh-DSS
- [电子邮件受保护]
- SSH-RSA
- [电子邮件受保护]
- rsa-sha2-256
- [电子邮件受保护]
- rsa-sha2-512
- [电子邮件受保护]
例如,当尝试使用从同一主机连接时ssh localhost -oHostKeyAlgorithms=ecdsa-sha2-nistp256 -vvv
,我"Unable to negotiate with 127.0.0.1 port 22: no matching host key type found. Their offer rsa-sha2-512,rsa-sha2-256,ssh-rsa
在本地安装了一个普通的 Debian 12 VM 来比较行为,当我运行相同的命令时,协商成功。
我非常感谢有关如何使其他主机密钥算法可用的建议。
根据 dave_thompson_085 发表的评论,我采取了以下步骤来解决该问题(作为 root 用户):
/etc/ssh/
/etc/ssh/
ssh-keygen -A
以重新生成主机密钥ssh-keygen -q -N "" -t ecdsa-sha2-nistp384 -f /etc/ssh/ssh_host_ecdsa_sha2_nistp384_key
/etc/ssh/sshd_config
与主机密钥文件名和位置匹配的 HostKey 条目。例如HostKey /etc/ssh/ssh_host_ecdsa_key
/etc/ssh/sshd_config
。例如HostKeyAlgorithms +ssh-rsa
。可以使用逗号分隔的列表来添加更多内容。在这种情况下,添加 ssh-rsa 只是为了实现所需的向后兼容性。注意:仅仅因为可以启用某些功能并不意味着应该启用它,即使它看起来是最简单的解决方案。请检查它是否满足您所需的安全级别。