一、背景介绍

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.rpm
  • openssh-clients-9.8p1-1.el7.x86_64.rpm
  • openssh-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.4p1

2. 备份原有配置文件

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.backup

3. 安装依赖(可选,通常系统已具备)

yum install -y libICE libSM libX11 libXt atk cairo gdk-pixbuf2 gtk2

4. 安装新的 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_64

5. 恢复自定义配置(可选)

如果需要保留原有配置,可以将备份文件覆盖回来:

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-auth

6. 修复密钥权限(重要)

新版 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_key

7. 重启 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 升级失败导致无法登录。

最后修改:2026 年 04 月 17 日
如果觉得我的文章对你有用,请随意赞赏