FEATURED · 精选文章

OpenSSH RPM包制作与升级实战指南

发布时间 / 2026/8/8 13:06:27
来源 / 创域科博编辑部
栏目 / 资讯中心
OpenSSH RPM包制作与升级实战指南 1. OpenSSH RPM包制作与升级核心价值在Linux系统运维中OpenSSH作为最主流的远程管理工具其安全性直接关系到服务器资产保护。2023年CVE-2023-38408等漏洞的爆发使得掌握自主RPM包构建能力成为运维人员的必备技能。与直接使用yum升级相比自定义RPM包具有三大不可替代优势版本控制精准可自由选择特定版本如从OpenSSH 7.4升级到10.3p1避免官方仓库版本滞后问题补丁灵活集成在打包阶段即可整合CVE补丁或自定义配置如禁用SSHv1协议部署效率倍增通过RPM依赖管理实现批量自动化升级特别适合CentOS等红帽系服务器集群重要提示生产环境升级前必须完整测试回滚方案建议保留旧版RPM包并配置yum history undo支持2. 构建环境准备与源码处理2.1 基础环境配置推荐使用CentOS 7/8或RHEL系统作为构建环境需预先安装以下工具链yum install -y rpm-build rpmdevtools gcc make openssl-devel krb5-devel pam-devel zlib-devel rpmdev-setuptree此步骤会创建~/rpmbuild目录结构其中SOURCES存放源码包SPECS存放编译规则文件。若出现没找到rpm命令错误需先安装rpm-build包。2.2 源码获取与验证从OpenSSH官网或镜像站下载源码时务必验证文件完整性wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.3p1.tar.gz gpg --verify openssh-9.3p1.tar.gz.sig # 需要先导入开发者公钥 sha256sum openssh-9.3p1.tar.gz | awk {print $1} # 对比官网发布的校验值对于需要修复CVE的情况应通过补丁方式处理而非直接修改源码cd ~/rpmbuild/SOURCES patch -p1 ../patches/openssh-9.3p1-cve202360002.patch3. SPEC文件深度定制3.1 关键参数解析以openssh-9.3p1为例SPEC文件中需要特别关注的编译选项%define _use_internal_md5 1 # 启用旧版MD5校验兼容 %define no_x11_askpass 0 # 禁用图形化密码询问 %define no_gnome_askpass 0 # 禁用GNOME集成 BuildRequires: openssl-devel 1.1.1 Requires: openssl 1.1.1 # 强制新版SSL依赖安全加固配置建议在%install阶段写入install -m 644 sshd_config $RPM_BUILD_ROOT/etc/ssh/sshd_config sed -i s/#PermitRootLogin yes/PermitRootLogin prohibit-password/ $RPM_BUILD_ROOT/etc/ssh/sshd_config3.2 多版本兼容处理针对CentOS 7等老旧系统需处理以下兼容问题替换过时的pam_ssh_agent_auth模块修改systemd单元文件适配旧版systemd添加libcrypto.so.10等老库的符号链接典型错误解决方案%post # 解决libcrypto兼容问题 test -f /usr/lib64/libcrypto.so.1.1 || ln -s /usr/lib64/libcrypto.so.10 /usr/lib64/libcrypto.so.1.14. 构建与质量验证4.1 完整构建流程使用rpmbuild进行分阶段构建和调试rpmbuild -ba ~/rpmbuild/SPECS/openssh.spec 21 | tee build.log关键检查点构建日志无error: Bad exit status提示生成的RPMS目录包含主包和子包如openssh-server、openssh-clients使用rpmlint进行基础校验rpmlint ~/rpmbuild/RPMS/x86_64/openssh-*.rpm4.2 升级实测流程分阶段升级方案可参考# 测试阶段 rpm -ivh --test openssh-9.3p1-1.el7.x86_64.rpm # 实际部署保留旧版 yum downgrade openssh-7.4p1-21.el7.x86_64 # 预先测试回滚 rpm -Uvh --oldpackage openssh-9.3p1-1.el7.x86_64.rpm # 验证阶段 sshd -t # 检查配置有效性 systemctl restart sshd systemctl status sshd5. 典型问题排查指南5.1 构建阶段问题问题1依赖项缺失导致构建失败现象报错error: Failed build dependencies 解决方案yum provides */缺少的头文件名 # 定位对应开发包 yum-builddep ~/rpmbuild/SPECS/openssh.spec # 自动安装所有依赖问题2签名验证失败现象警告WARNING: digest verification failed 处理方案rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 rpm -Kv --nosignature openssh-9.3p1-1.el7.x86_64.rpm5.2 运行时问题问题3服务器拒绝连接现象升级后出现ssh_exchange_identification: Connection closed by remote host 排查步骤检查SELinux上下文restorecon -Rv /etc/ssh验证防火墙规则firewall-cmd --list-services | grep ssh检查PAM模块兼容性问题4GSSAPI认证失败解决方案在sshd_config中添加GSSAPIAuthentication yes GSSAPICleanupCredentials no6. 高级技巧与自动化6.1 补丁集成管理使用quilt工具管理多补丁quilt new cve-2023-38408.patch quilt add sshconnect2.c vi sshconnect2.c # 编辑修复代码 quilt refresh6.2 自动化构建方案通过Mock构建隔离环境yum install -y mock mock -r epel-7-x86_64 --init mock -r epel-7-x86_64 --copyin ~/rpmbuild/SOURCES/* /builddir/build/SOURCES/ mock -r epel-7-x86_64 --specopenssh.spec --sources/builddir/build/SOURCES6.3 版本回滚策略创建预升级快照yum history new rpm -qa --queryformat %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n ssh_packages.list回滚操作yum history list | grep ssh yum history undo 事务ID
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻