在最近从 Debian 11 升级的 Debian 12 Bookworm(运行 OpenSSH_9.2)上,只有rsa-sha2-512,rsa-sha2-256 服务器主机密钥算法默认可用。sshd_configHostKeyAlgorithms +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 来比较行为,当我运行相同的命令时,协商成功。
我非常感谢关于如何使其他主机密钥算法可用的建议。
答案1
根据 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。 - 重启 sshd
注意:即使某些功能可以启用,也并不意味着应该启用它,即使它看起来是最简单的解决方案。请检查它是否满足您所需的安全级别。