Debian/Ubuntu 默认禁用 SSH RSA 密钥?一篇文章教你彻底解决

最近升级了 Gitspace 基础环境版本,导致没法使用 RemoteSSH。
在新版本系统中,不少人发现原本一直使用的 RSA SSH Key 突然无法登录了。原因不是你的服务器出了问题,而是 OpenSSH 在 8.3 版本之后,默认关闭了对 ssh-rsa 的支持。
本文带你快速了解为什么会这样、怎样安全地重新启用 RSA Key 登录,以及需要注意哪些风险和最佳实践。全文简单易懂、一步到位。
RSA 过时协议
OpenSSH 官方从 8.3 起,将 ssh-rsa 标记为过时算法,主要原因是:
- RSA(尤其是小于 4096 位的)安全性相对较弱
- 更现代、更高强度的算法例如 ed25519、ecdsa 已经普及
- 出于安全考虑,服务器端默认不再接受 ssh-rsa 签名
因此,在看到日志类似:
Authentications that can continue: publickey,password
Trying private key: /root/.ssh/id_rsa
之前免密配置了但就是死活登录不上
注意:客户端其实仍然可以使用 RSA,只不过是服务器拒绝了它
大多数情况下,客户端不用配置任何内容,因为 OpenSSH 客户端默认依然支持 RSA
真正需要修改的是服务器,因为服务器默认不接受 ssh-rsa 公钥
当然还有少数情况下客户端也需要配置,我就是改出问题了,客户端也需要配置
重新启用 RSA Key 登录
为了避免修改主配置文件 sshd_config 被升级覆盖,我们使用新版本系统推荐的配置目录 /etc/ssh/sshd_config.d
sudo tee /etc/ssh/sshd_config.d/enable_rsa_keys.conf > /dev/null << EOF
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
EOF
然后重启 ssh 服务
sudo systemctl restart ssh
或
sudo systemctl restart sshd
到这里,服务器已恢复对 RSA Key 的支持。
如果已经执行了这个,还不行就需要配置客户端了
# ~/.ssh/config
Host *
User root
ServerAliveInterval 60
ForwardAgent yes
TCPKeepAlive no
ControlMaster auto
ControlPath ~/.ssh/tmp/connection-%r@%h:%p
ControlPersist 1h
Compression yes
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
如果没有 SSH 密钥
ssh-keygen -t rsa -b 4096
或者 默认 -a是16
ssh-keygen -t ed25519 -a 100
其他
只在必要场景下开启 RSA,新的环境更推荐 ed25519
