核心是“先确认、再匹配、后验证”:第一步查服务端真实版本、OpenSSL版本及漏洞影响范围;第二步据环境选包管理升级、离线RPM或源码编译;第三步启用备用通道、备份关键项并验证配置;第四步核对版本与changelog确认CVE实质修复。

升级 SSH 服务版本来修复漏洞,核心不是“直接更新”,而是“先确认、再匹配、后验证”。不同系统、不同漏洞类型、不同运维约束,适用的方法完全不同。盲目执行 yum update openssh 或编译安装,可能中断连接、引发依赖错误,甚至让服务器失管。
第一步:精准识别漏洞性质和当前环境
拿到漏洞告警(如 CVE-2024-6387、CVE-2023-38408)后,别急着升级,先做三件事:
- 查服务端真实版本:
/usr/sbin/sshd -V 2>&1 | head -1(注意不是ssh -V,那是客户端) - 查 OpenSSL 版本:
openssl version;OpenSSH ≥9.4 要求 OpenSSL ≥1.1.1u,不满足就先升 OpenSSL - 看漏洞影响范围:例如 CVE-2024-6387 影响 8.5p1–9.8p2,修复需 ≥9.8p3;CVE-2021-41617 需 ≥8.8p1
第二步:按环境选最稳妥的升级路径
没有万能命令,只有最适合你当前条件的方式:
-
官方源有新版(如 CentOS Stream 9 / Ubuntu 22.04+):用包管理器在线升级最安全
sudo apt update && sudo apt install --only-upgrade openssh-server(Debian/Ubuntu)sudo dnf update openssh(RHEL 8+/CentOS Stream) -
生产环境需可控、离线或版本精确(如 CentOS 7):优先选签名 RPM 离线升级
下载适配系统的 RPM 包(如openssh-9.6p1-el7.x86_64.rpm),校验签名后执行:sudo rpm -Uvh --force /path/to/openssh-*.rpm -
系统已 EOL 或必须上特定高版本(如 OpenSSH 10.0):才考虑源码编译
顺序必须是:先装zlib-devel openssl-devel pam-devel systemd-devel→ 升级 OpenSSL → 编译 OpenSSH 并指定--prefix=/usr/local/openssh→ 配 systemd 服务文件指向新路径
第三步:升级中必须做的安全兜底
SSH 升级是“带电作业”,断连=失管。以下动作缺一不可:
- 启用备用通道:提前开启
telnet或确保 IPMI/iDRAC 可用,防止 sshd 启动失败时无法登录 - 备份关键项:
cp -a /etc/ssh /etc/ssh.bak、cp /usr/sbin/sshd /usr/sbin/sshd.bak、sshd -t测试配置语法 - 重启服务后立即验证:
systemctl restart sshd→ 用另一台机器测试连接 → 查日志journalctl -u sshd -n 50 --no-pager确认无 fatal 错误
第四步:验证是否真正修复成功
版本号更新只是第一步,要确认漏洞已实质修复:
- 再次运行
sshd -V,核对输出版本是否在“Fixed in”列表内(查 Red Hat 安全公告或 Ubuntu CVE 页面) - 检查 changelog 是否包含对应 CVE 的修复提交(如 OpenSSH 9.8p3 的 changelog 明确列出 regreSSHion 修复)
- 若扫描工具仍报错,注意是否为缓存延迟,或需同步更新客户端(
ssh -V)、scp 工具等配套组件


















