OpenSSH 10.0:sshd 默认禁用有限域 DH,DSA 移除并拆出 sshd-auth
发布说明:OpenSSH 10.0。另有两个镜像链接:openssh.org、openbsd.org。
不兼容变更
DSA 签名算法移除
OpenSSH 10.0 移除弱 DSA 签名算法,完成 2015 年开始的弃用。依赖 ssh-dss 主机密钥或用户密钥的连接会失败。HostKeyAlgorithms 里加 ssh-dss 不会恢复,因为支持已从代码中移除,只能提前轮换密钥。
scp/sftp 调用 ssh 时传 ControlMaster no
scp(1) 和 sftp(1) 在调用 ssh 时传 ControlMaster no。当 ControlMaster 设置为 yes/auto 时,这会禁用隐式会话创建。已有 multiplexing 会话不受影响,仍可复用。
版本号 10.0 与 OpenSSH_1* 匹配陷阱
10.0 的 banner 是 SSH-2.0-OpenSSH_10.0。用 OpenSSH_1* 这类模式匹配版本的软件可能把 10.0 误判为 1.x。升级前检查自动化脚本、配置管理、巡检工具里的版本正则。
sshd 认证阶段拆到 sshd-auth
sshd(8) 把用户认证阶段代码从 per-connection 的 sshd-session 二进制移到新的 sshd-auth 二进制。这样 pre-auth 攻击面拥有独立地址空间;认证完成后卸载认证代码,节省少量运行时内存。多数情况下不可见,但部分日志现在来自 sshd-auth 而不是 sshd-session。下游发行版打包时需要包含 sshd-auth。日志采集、fail2ban、审计规则如果按进程名前缀匹配,需要同步调整。
sshd 默认禁用有限域 DH
sshd(8) 默认禁用有限域(modp)Diffie-Hellman 密钥交换,从默认 KEXAlgorithms 中移除 diffie-hellman-group* 和 diffie-hellman-group-exchange-*。客户端不变,继续默认支持这些算法。有限域 DH 要达到与 ECDH 或后量子算法相同的安全级别,速度慢、开销大。
moduli 回退行为变化
DH Group Exchange KEX 在 moduli 文件存在、但客户端请求范围内没有模数时,不再隐式回退到编译内置组。只有 moduli 文件完全不存在时才回退。moduli 文件被错误编辑可能导致连接失败。bz#2793。
自 OpenSSH 9.9 以来的变更
- ssh(1):默认密钥协商算法改为混合后量子
mlkem768x25519-sha256。该算法抗量子计算机,强度不低于curve25519-sha256,已由 NIST 标准化,比之前的默认算法更快。 - 默认 cipher 顺序:
chacha20-poly1305、AES-GCM、AES-CTR。 - ssh(1)、sshd(8):ssh_config 和 sshd_config 增加
Match version,例如Match version OpenSSH_10.*。 - sshd(8):sshd_config 增加 session type,可匹配 shell/exec/subsystem/none。
- 少量安全修复和 bug 修复。
升级前自查
ssh -Q kex查看当前支持的 KEX,确认是否有客户端依赖diffie-hellman-group*。ssh -Q key确认主机密钥算法列表,DSA 已不在其中。- 检查 moduli 文件是否存在、内容范围是否正确,避免请求范围无模数触发连接失败。
- 确认打包流程和容器镜像包含
sshd-auth。 - 检查日志、监控、fail2ban 规则对
sshd-session前缀的依赖。 - 检查版本匹配正则,避免
OpenSSH_1*把 10.0 误判成 1.x。
配置片段
sshd 需要兼容只支持有限域 DH 的旧客户端时,在 sshd_config 中显式加回:
# 在默认 KEX 基础上追加 group14
KexAlgorithms +diffie-hellman-group14-sha256
如果需要 group-exchange:
KexAlgorithms +diffie-hellman-group-exchange-sha256
客户端侧,若旧服务器只提供 DSA 主机密钥,10.0 无法通过 HostKeyAlgorithms 恢复,因为 DSA 支持已彻底移除,需要先轮换主机密钥。显式指定现代主机密钥算法:
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,rsa-sha2-256