OpenSSH 10 移除 DSA 支持:老服务器还能连吗
OpenSSH 10 已移除弱 DSA 签名算法支持,本文解释升级后可能出现的连接失败、排查命令和 SSH 安全加固建议。
SSH 是 Linux 运维最常用的入口。OpenSSH 10 的一个重要变化是移除弱 DSA 签名算法支持。对新服务器来说,这通常没有影响;但对历史较久的设备、老系统、网络设备和自动化脚本来说,升级后可能出现“突然连不上”的问题。
本文整理排查方法和升级建议。
DSA 为什么被移除
DSA 曾经是 SSH 支持的签名算法之一,但它已经不适合现代安全要求。OpenSSH 很早就开始禁用和警告 DSA,OpenSSH 10 则完成了移除。
如果你的服务器或客户端仍依赖 ssh-dss,说明它已经处在非常老的安全基线上。
可能出现的现象
升级 OpenSSH 后,连接老设备可能报错:
no matching host key type found
no matching public key algorithm found
Permission denied (publickey)
也可能是自动化工具失败:
- Ansible 连接失败
- rsync over ssh 失败
- Git over ssh 失败
- 备份脚本失败
- 老交换机或存储设备无法登录
先确认当前 OpenSSH 版本
客户端:
ssh -V
服务端:
sshd -V
有些系统的 sshd -V 输出到 stderr,可以这样看:
sshd -V 2>&1
检查服务器支持的 host key
在客户端执行:
ssh -vvv user@host
重点看这些信息:
debug1: kex: host key algorithm
debug1: Authentications that can continue
如果日志里反复出现 ssh-dss,说明对端非常旧。
也可以查看服务端 host key 文件:
ls -l /etc/ssh/ssh_host_*key*
现代服务器一般应该有:
- ED25519
- ECDSA
- RSA
不建议继续依赖 DSA。
服务端如何生成新 host key
如果是你自己维护的 Linux 服务器,可以生成 ED25519 host key:
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ''
确认 sshd_config:
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
检查配置:
sshd -t
systemctl restart sshd
注意:重启 SSH 前,务必保留一个已登录会话,避免配置错误导致无法远程进入。
用户密钥也要升级
如果用户还在使用 DSA key:
ls ~/.ssh/id_dsa
建议生成新密钥:
ssh-keygen -t ed25519 -C "your-name"
然后把公钥加入服务器:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
Ansible 环境要特别注意
Ansible 批量管理服务器时,SSH 算法变化会一次影响很多节点。
升级前建议先跑:
ansible all -m ping -vvv
如果有老设备失败,不要急着在全局配置里放宽算法,而是先分组处理:
[legacy]
old-host ansible_host=192.168.1.10
长期方案仍然是升级老系统或替换密钥。
不建议长期临时放宽
有些文章会建议在客户端配置里重新允许旧算法。临时应急可以理解,但长期不建议。
因为旧算法不是“被误伤”,而是真的安全性不足。更好的做法是:
- 升级服务端 OpenSSH。
- 生成新 host key。
- 替换用户密钥。
- 淘汰不能升级的老设备。
总结
OpenSSH 10 移除 DSA 支持,是 SSH 安全基线继续前进的信号。
如果升级后老服务器连不上,不要只想着“怎么恢复旧算法”,而应该借机排查服务器密钥、用户密钥和自动化脚本。SSH 是运维入口,它的安全性值得认真维护。
