技术博客

OpenSSH 10 移除 DSA 支持:老服务器还能连吗

OpenSSH 10 已移除弱 DSA 签名算法支持,本文解释升级后可能出现的连接失败、排查命令和 SSH 安全加固建议。

OpenSSH 10SSHDSALinux安全

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)

也可能是自动化工具失败:

先确认当前 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*

现代服务器一般应该有:

不建议继续依赖 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 10 移除 DSA 支持,是 SSH 安全基线继续前进的信号。

如果升级后老服务器连不上,不要只想着“怎么恢复旧算法”,而应该借机排查服务器密钥、用户密钥和自动化脚本。SSH 是运维入口,它的安全性值得认真维护。

参考资料