一、背景介绍
OpenSSH 是 Linux 系统远程管理的核心服务,其安全性至关重要。2024年7月,安全社区披露了一个高危漏洞 CVE-2024-6387(regreSSHion)。该漏洞存在于基于 glibc 的 Linux 系统中,影响 OpenSSH 版本 8.5p1 至 9.8p1(不含9.8p1),攻击者可在无需认证的情况下远程执行任意代码,从而获得系统控制权。
对于已经停止维护的 CentOS 7 等老旧系统,官方仓库不再提供新版 OpenSSH 的更新包,因此需要自行编译升级。boypt/openssh-rpms 项目提供了一个自动化脚本,能够将最新版本的 OpenSSH 源代码编译成 RPM 包,极大简化了编译过程,并支持批量部署。
该项目支持的系统包括:CentOS 5/6/7/8/Stream 8、Amazon Linux 1/2/2023、UnionTech OS Server 20、openEuler 22.03、AnolisOS 7.9/8.6 等。本文以 CentOS 7.x 系统为例,详细介绍如何编译 OpenSSH 9.8p1 的 RPM 包并完成升级。
二、升级前的环境确认
升级前请确认当前 OpenSSH 版本:
[root@ncayu8847 ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017可以看到当前版本为 7.4p1,远低于安全版本,存在多个已知漏洞。
三、下载所需软件包
1. OpenSSH 源码下载地址
https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/2. 自动化编译脚本仓库
https://github.com/boypt/openssh-rpms/3. 直接下载压缩包(推荐)
wget https://github.com/boypt/openssh-rpms/archive/refs/heads/main.zip四、上传并解压文件
将下载的 main.zip 上传到 CentOS 7 服务器,然后解压:
unzip openssh-rpms-main.zip
cd openssh-rpms-main/五、安装编译环境
编译 RPM 包需要安装开发工具及相关依赖:
yum groupinstall -y "Development Tools"
yum install -y imake rpm-build pam-devel krb5-devel zlib-devel libXt-devel libX11-devel gtk2-devel perl perl-IPC-Cmd六、修改 OpenSSL 版本(可选)
项目默认可能使用 OpenSSL 3.0.x,但 CentOS 7 环境建议使用兼容性更好的 1.1.1 系列。编辑 version.env 文件:
cat version.env根据需要修改,例如:
# OPENSSLSRC=openssl-3.0.14.tar.gz # 注释此版本
OPENSSLSRC=openssl-1.1.1v.tar.gz # 修改为1.1.1
OPENSSHSRC=openssh-9.8p1.tar.gz
ASKPASSSRC=x11-ssh-askpass-1.2.4.1.tar.gz
PERLSRC=perl-5.38.2.tar.gz
PKGREL=1七、拉取源码并开始编译
运行脚本自动下载源码:
./pullsrc.sh如果下载过程中出现错误,可以手动将源码文件放入 downloads/ 目录。下载完成后查看:
[root@ncayu8847 openssh-rpms-main]# ll downloads/
总用量 11564
-rw-r--r--. 1 root root 1910393 7月 1 15:34 openssh-9.8p1.tar.gz
-rw-r--r--. 1 root root 9893443 1月 22 2024 openssl-1.1.1v.tar.gz
-rw-r--r--. 1 root root 29229 7月 5 17:52 x11-ssh-askpass-1.2.4.1.tar.gz执行编译脚本:
./compile.sh编译完成后,RPM 包位于 el7/RPMS/x86_64/ 目录下:
[root@ncayu8847 openssh-rpms-main]# ll el7/RPMS/x86_64/
总用量 16840
-rw-r--r--. 1 root root 5112928 7月 23 12:05 openssh-9.8p1-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 5197296 7月 23 12:05 openssh-clients-9.8p1-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 4153264 7月 23 12:05 openssh-debuginfo-9.8p1-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 2773660 7月 23 12:05 openssh-server-9.8p1-1.el7.x86_64.rpm升级所需的三个核心包为:
openssh-9.8p1-1.el7.x86_64.rpmopenssh-clients-9.8p1-1.el7.x86_64.rpmopenssh-server-9.8p1-1.el7.x86_64.rpm
八、升级 OpenSSH 到 9.8p1
1. 卸载旧版冲突组件(如有 askpass)
rpm -qa | grep openssh
# 若存在 openssh-askpass-gnome,则卸载
rpm -e openssh-askpass-gnome-9.4p12. 备份原有配置文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
cp /etc/pam.d/sshd /etc/pam.d/sshd.backup
cp /etc/pam.d/system-auth /etc/pam.d/system-auth.backup3. 安装依赖(可选,通常系统已具备)
yum install -y libICE libSM libX11 libXt atk cairo gdk-pixbuf2 gtk24. 安装新的 RPM 包
进入 RPM 包所在目录,执行:
yum localinstall -y openssh-*.rpm如果
[root@localhost mnt]# yum localinstall -y openssh-*.rpm
已加载插件:fastestmirror, refresh-packagekit, security
设置本地安装进程
诊断 openssh-10.3p1-b6.el6.x86_64.rpm: openssh-10.3p1-b6.el6.x86_64
openssh-10.3p1-b6.el6.x86_64.rpm 将作为 openssh-5.3p1-123.el6_9.x86_64 的更新
Determining fastest mirrors
* gklz: 11.63.132.8:8004
gklz | 2.9 kB 00:00
诊断 openssh-clients-10.3p1-b6.el6.x86_64.rpm: openssh-clients-10.3p1-b6.el6.x86_64
openssh-clients-10.3p1-b6.el6.x86_64.rpm 将作为 openssh-clients-5.3p1-123.el6_9.x86_64 的更新
诊断 openssh-server-10.3p1-b6.el6.x86_64.rpm: openssh-server-10.3p1-b6.el6.x86_64
openssh-server-10.3p1-b6.el6.x86_64.rpm 将作为 openssh-server-5.3p1-123.el6_9.x86_64 的更新
解决依赖关系
--> 执行事务检查
---> Package openssh.x86_64 0:5.3p1-123.el6_9 will be 升级
--> 处理依赖关系 openssh = 5.3p1-123.el6_9,它被软件包 openssh-askpass-5.3p1-123.el6_9.x86_64 需要
---> Package openssh.x86_64 0:10.3p1-b6.el6 will be an update
---> Package openssh-clients.x86_64 0:5.3p1-123.el6_9 will be 升级
---> Package openssh-clients.x86_64 0:10.3p1-b6.el6 will be an update
---> Package openssh-server.x86_64 0:5.3p1-123.el6_9 will be 升级
---> Package openssh-server.x86_64 0:10.3p1-b6.el6 will be an update
--> 完成依赖关系计算
错误:Package: openssh-askpass-5.3p1-123.el6_9.x86_64 (@anaconda-CentOS-201806291108.x86_64/6.10)
Requires: openssh = 5.3p1-123.el6_9
正在删除: openssh-5.3p1-123.el6_9.x86_64 (@anaconda-CentOS-201806291108.x86_64/6.10)
openssh = 5.3p1-123.el6_9
Updated By: openssh-10.3p1-b6.el6.x86_64 (/openssh-10.3p1-b6.el6.x86_64)
openssh = 10.3p1-b6.el6
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
[root@localhost mnt]#rpm -e openssh-askpass-5.3p1-123.el6_9.x86_645. 恢复自定义配置(可选)
如果需要保留原有配置,可以将备份文件覆盖回来:
cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config
cp /etc/pam.d/sshd.backup /etc/pam.d/sshd
cp /etc/pam.d/system-auth.backup /etc/pam.d/system-auth6. 修复密钥权限(重要)
新版 OpenSSH 对密钥文件权限要求更严格,可能出现如下报错:
Permissions 0640 for '/etc/ssh/ssh_host_ed25519_key' are too open.
解决方法:将相关密钥权限改为 600
chmod 0600 /etc/ssh/ssh_host_rsa_key
chmod 0600 /etc/ssh/ssh_host_ecdsa_key
chmod 0600 /etc/ssh/ssh_host_ed25519_key7. 重启 SSH 服务并验证
systemctl restart sshd
systemctl enable sshd # 设置开机自启(通常已启用)
ssh -V输出示例:
[root@ncayu8847 openssh9.8]# ssh -V
OpenSSH_9.8p1, OpenSSL 1.1.1v 1 Aug 2023九、连接测试
测试从本机或其他主机 SSH 连接:
[root@ncayu8847 openssh9.8]# ssh 192.168.0.117
The authenticity of host '192.168.0.117 (192.168.0.117)' can't be established.
ED25519 key fingerprint is SHA256:ug9pQzqfWPCiuX6SWVXSwZEImq1aSjc5GzBGzMZgyAk.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.117' (ED25519) to the list of known hosts.
(root@192.168.0.117) Password:
Last login: Tue Jul 23 12:59:07 2024 from 192.168.0.7
[root@ncayu8847 ~]# 连接正常,升级成功。
十、总结
通过使用 boypt/openssh-rpms 项目,我们能够在已停止维护的 CentOS 7 系统上,顺利编译并升级 OpenSSH 至 9.8p1,从而修复 CVE-2024-6387 高危漏洞。整个过程只需几步命令,编译出的 RPM 包还可用于同版本其他服务器的批量部署,极大提升了运维效率。
建议生产环境升级前先在测试环境中验证,并确保有备用远程管理方式(如带外管理、串口控制台),以防 SSH 升级失败导致无法登录。