OpenSSH 10.6 升级笔记:压缩、用户名和证书日期这三处先动
OpenSSH 10.6/10.6p1 于 2026-10-06 发布。完整说明见 release-10.6 与 releasenotes.html。这次变更里,压缩侧信道、命令行用户名过滤、证书日期换算这三处会直接影响现网行为,建议在升级窗口前先逐项核对。
1. LZ77 字典编码器被关闭,Compression 不再是原来的效果
sshd(8) 与 ssh(1) 都禁用了 LZ77 字典编码器,针对的是 Fabian Bäumer 和 Marcus Brinkmann 的预印本 Crossing the Streams: SSH Plaintext Recovery via a Common Compression Context in Multiplexed Channels(arXiv:2609.07709,2026)。
攻击模型是选择明文:多路复用会话中所有通道共享同一份压缩字典,攻击者在某个通道里注入可控输入,LZ77 用指向编码器搜索缓冲区的回引用替换重复字符串,从而让这些输入可识别地反映到传输密文的总长度上,进而从另一条通道恢复秘密。文档本来就建议不要在同时承载可信与不可信流量的连接上开启压缩,这次是从实现层面收掉了这条路。
直接后果是 Compression 选项的效果变差。需要带宽的场景应尽量改用应用层压缩(例如在传输的数据格式上自行压缩),而不是指望 SSH 层。另一处配套修复是保证压缩后的 payload 不会膨胀超过支持的最大包长。
验证方式:
ssh -V
ssh -G | grep -i '^compression'
ssh -G 输出的是客户端实际生效的配置,包含从 ssh_config 和命令行推导出的值,比只看配置文件可靠。
2. 命令行用户名不再接受 $ 和反斜杠
ssh(1) 对命令行上输入的目标用户名做了更严格的检查,含反斜杠和美元符号的用户名会被拒绝。目的是防止来自不可信来源的用户名经 ProxyCommand、Match exec 等路径进入 shell 上下文造成注入。
注意边界:通过配置文件 User 指令指定的用户名不受这条限制。所以从外部清单、CMDB 或用户输入拼接 user@host 的脚本会先撞上这条;把用户名落到 ssh_config 的 User 里则不受影响。升级前建议先扫一遍包装脚本和跳板逻辑。
3. ssh-keygen 换算日期时正确处理夏令时
ssh-keygen(1) 修正了日期转换中的夏令时处理。此前换算可能带来最多 ±1 小时的误差;如果时区是 Antarctica/Troll,误差可达 ±2 小时。表现为签发出的证书过期时间不正确(bz4004)。
已有证书不会自动修正,需要重签。检查现有证书有效期:
ssh-keygen -L -f /path/to/id_ed25519-cert.pub
Valid: 行给出起止时间。如果是 X.509 证书而非 OpenSSH 证书,用:
openssl x509 -in cert.pem -noout -dates
重点核对签发时间落在夏令时切换前后的那批证书,误差窗口就在那里。
同一版本里其余需要过一遍的变更
sshd(8)现在完整执行authorized_keys的restrict关键字,此前它没有正确覆盖隧道转发(PermitTunnel,默认关闭)。这是与 10.5 修复的另一个独立问题。- 在不支持文件描述符传递、且分配 PTY 需要 root 的平台上,
GatewayPorts和StreamLocalForwarding被强制禁用。受影响平台包括 SCO OpenServer 5 和 QNX 6;这类平台的支持计划在后续版本移除。相关背景是认证后的sshd-session进程保留 root 权限,可能绕过用户控制(unix domain socket 连接、通过-R绑定低号 TCP 端口)。 scp(1)的-R开始弃用:10.6 仍可用,但会向 stderr 打弃用警告;后续版本该选项会被忽略,保留默认的经本机中转的远端到远端复制行为。解析 scp 输出的脚本要能容忍这条 warning。- 新增混合后量子签名算法
ssh-mldsa44-ed25519。与之前的实验实现不同,这个名字不再带@openssh.com厂商扩展后缀,硬编码旧算法名的配置和脚本需要同步修改。
ssh -Q sig | grep mldsa
升级顺序与回滚考量
- 先在测试环境确认三件事:
ssh -G里Compression的实际取值、ssh -Q sig是否出现ssh-mldsa44-ed25519、用新版本重签一张证书并核对ssh-keygen -L的时间。 - 再升级服务端,最后升级客户端与自动化脚本。用户名过滤和 scp 警告都出现在客户端侧,客户端先升会更早暴露脚本问题。
- 混合版本期注意算法协商:新名字去掉了
@openssh.com后缀,新旧节点互连时若协商到该签名算法会失败,确认两端版本后再启用。
回滚风险主要在压缩:旧版本恢复 LZ77 字典编码器后带宽表现回到原状,但同时把该侧信道重新打开;如果现网依赖 SSH 层压缩节省带宽,改成应用层压缩才是长期方案。证书日期修复不可回滚——回滚 ssh-keygen 只会重新引入 ±1(或 ±2)小时的过期时间误差,已重签的证书不受影响。restrict 与平台相关的转发禁用属于收紧行为,回滚意味着这些控制重新失效。