当然可以!以下是一篇结构清晰、语言通俗易懂的技术博客草稿,供你参考和使用:
在离线 OpenEuler-22.03 服务器上升级 OpenSSH 的完整指南
背景介绍
最近在对一台内网的 OpenEuler-22.03 服务器进行安全扫描时,发现其 SSH 版本存在多个高危漏洞,其中甚至包含一个 2024 年披露的 CVE 漏洞。这引起了我们的高度重视。
通过命令查看当前 SSH 版本:
rpm -q openssh
输出结果为:
openssh-8.8p1-32.oe2203sp3.x86_64
而此时 OpenSSH 官方版本已经更新到了 v10,显然我们需要尽快将系统上的 OpenSSH 升级到最新修复版本。
然而,由于该服务器处于内网隔离环境(无网络连接),直接通过 yum
或 dnf
更新是不可能的。而且官方提供的 RPM 包中,只有源码包 .src.rpm
可用,x86 架构的二进制包全部 404。
于是我们决定采取“在线编译生成 RPM 包 → 离线安装”的方式完成升级。本文详细记录了整个操作流程与注意事项。
解决思路
由于目标服务器是离线环境,不能直接联网下载依赖或更新包,因此我们采用如下方案:
- 在一台具有网络连接的同架构(x86_64)、同系统的机器上,构建 OpenSSH 的
.src.rpm
源码包,生成可用的二进制.rpm
包。 - 将这些
.rpm
包拷贝到目标离线服务器上,进行本地安装。 - 验证升级后的 SSH 版本与服务运行状态。
准备工作
下载所需文件
从 OpenEuler 官方镜像站下载最新的源码 RPM 包(确保版本号一致):
openssh-8.8p1-34.oe2203sp3.src.rpm
步骤详解
第一步:安装必要的构建工具
在有网络的机器上,先安装构建 RPM 所需的基础开发工具:
sudo dnf install rpm-build make gcc libtool autoconf automake zlib-devel openssl-devel
如果你无法联网,请提前下载好相关 RPM 包并手动上传安装。
第二步:创建 rpmbuild 工作目录
执行以下命令,创建用于构建 RPM 的标准目录结构:
mkdir -p ~/rpmbuild/{SOURCES,SPECS,RPMS,SRPMS}
第三步:导入 .src.rpm 文件
将下载好的源码包放到 SOURCES
目录下,并安装它以提取 .spec
文件和源代码:
mv openssh-8.8p1-34.oe2203sp3.src.rpm ~/rpmbuild/SOURCES/
rpm -ivh ~/rpmbuild/SOURCES/openssh-8.8p1-34.oe2203sp3.src.rpm
这条命令会自动将
.spec
文件放入~/rpmbuild/SPECS/
,并将源码解压到~/rpmbuild/SOURCES/
。
第四步:安装构建所需的依赖项
进入 SPECS 目录,尝试安装构建依赖:
cd ~/rpmbuild/SPECS
sudo dnf builddep openssh.spec
如果提示某些依赖找不到,可能需要手动下载对应的 RPM 包并上传安装。
第五步:开始构建二进制 RPM 包
使用 rpmbuild
命令开始构建:
rpmbuild -ba openssh.spec
成功后,你会在 ~/rpmbuild/RPMS/x86_64/
目录下看到多个生成的 RPM 包,例如:
openssh-8.8p1-34.oe2203sp3.x86_64.rpm
openssh-server-8.8p1-34.oe2203sp3.x86_64.rpm
openssh-clients-8.8p1-34.oe2203sp3.x86_64.rpm
...
第六步:将生成的 RPM 包传输至离线服务器
你可以使用 SCP、U盘、或者任何其他方式将这些 RPM 包传送到目标离线服务器上。
---### 第七步:在离线服务器上安装 RPM 包登录离线服务器,解压并安装 RPM 包:```bash
tar zxvf /root/offline_ssh_rpms.tar
cd /root
rpm -Uvh *.rpm
也可以使用 dnf
安装:
dnf install *.rpm
第八步:验证安装结果
重启 SSH 服务:
systemctl restart sshd
检查新版本:
rpm -q openssh
你应该看到类似如下输出:
openssh-8.8p1-34.oe2203sp3.x86_64
同时可以使用以下命令确认 SSH 实际运行版本:
ssh -V
输出应为:
OpenSSH_8.8p1, OpenSSL 1.xx.x ...
注意事项
- 备份原配置文件:升级前建议备份
/etc/ssh/
下的所有配置文件,避免升级过程中被覆盖。 - 不要中断 SSHD 服务:升级期间请勿关闭或中断 SSH 服务,否则可能导致无法远程登录。
- 测试环境先行:建议先在测试环境中验证流程后再操作生产服务器。
- 保留旧包:保留原始的 RPM 包,以便回滚使用。
总结
通过本文的方法,即使是在完全断网的环境下,我们也能够顺利地完成 OpenSSH 的版本升级,有效修复已知的安全漏洞。
整个过程的核心思想是:
“在联网机器上构建 RPM 包,再将构建结果拷贝到离线机器上进行安装”。
这种方法不仅适用于 OpenSSH,也适用于其他需要源码编译但又受限于网络的场景,具备良好的通用性和可扩展性。