一、问题及背景
CentOS 7 在各类生产环境中依然有着较高的使用率,但其自带的 OpenSSH 版本通常较低,例如常见的 OpenSSH_7.4p1。
通过 ssh -V 命令可以查看当前版本:
ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
低版本的 OpenSSH 在安全检查时常会报出高危漏洞,例如 OpenSSH 9.6 以下版本普遍受到多个漏洞影响,包括但不限于:
OpenSSH ssh-agent远程代码执行漏洞(CVE-2023-38408)
OpenSSH 安全漏洞(CVE-2021-41617)
Openssh 命令注入漏洞(CVE-2020-15778)
OpenSSH 信息泄漏漏洞 (CVE-2023-51385)
过去,升级 OpenSSH 通常采用编译源码的方式,过程涉及 OpenSSL 的同步升级,颇为复杂。为了避免升级过程中远程连接中断,还需要预先安装并配置好 telnetd 服务作为备用登录方案,整体流程对运维人员有一定挑战。
二、使用RPM软件包升级OpenSSH
近期,在 GitHub 上发现了 openssh-rpms 项目。该项目提供了预编译的 RPM 包,能够帮助用户在 Linux 系统上轻松安装或升级至最新版的 OpenSSH。
整个升级过程简洁流畅,无需额外安装 telnetd 服务,现有的 SSH 远程连接在操作期间也不会中断,大大简化了运维工作。
三、openssh-rpms项目简介
以下内容主要基于该项目文档,并对涉及的脚本命令进行了微调与说明。
OpenSSH 是一个广泛用于安全远程登录和文件传输的免费工具。本项目通过提供 RPM 包的形式,帮助用户便捷地升级 OpenSSH,确保系统使用最新的安全版本。
四、项目特性
- 提供 RPM 包,可直接升级至最新版 OpenSSH。
- 用户也可下载源码包,利用项目内的脚本自行编译 RPM(脚本不包含自动获取源码包的功能)。
- 首次使用本项目提供的 SSH RPM 包时,需配套安装项目提供的 OpenSSL。
- 项目提供的 OpenSSL-3.3.1 版本,理论上可支持后续多个 OpenSSH 版本的升级。
- 支持 x64 架构下的 CentOS 7/8、AlmaLinux 8、RockyLinux 8、AnolisOS 8、Kylin-V10 等系统。
五、安装步骤 (以 CentOS 7 为例)
-
下载 RPM 包:从项目的 Release 页面下载适用于你系统的版本。
-
执行安装命令:
# 解压下载的包,请根据实际下载的文件名进行修改
tar zxvf openssl-3.3.1-rpms-el7.tar.gz
tar zxvf openssh-10.0p2-rpms-el7-x64.tar.gz
# 安装新版本 OpenSSL(注意:这里仅安装openssl和openssl-devel,openssl-libs请谨慎操作)
rpm -ivh --nodeps --force openssl-3.3.1*/openssl-{3,d}*.rpm
# 卸载旧版本 OpenSSH(直接使用 yum remove openssh* -y 可能会报错,建议指定版本)
yum remove openssh*7.4* -y
# 安装新版本 OpenSSH(请根据实际解压的目录名修改)
yum install -y openssh-10.0p2*/openssh*
-
进行关键配置:
# 关闭 SELinux(生产环境请根据安全策略谨慎操作)
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config && setenforce 0
# 启用 PAM 认证
sed -i 's/#UsePAM.*/UsePAM yes/' /etc/ssh/sshd_config
# 允许 Root 登录(根据你的安全需求决定是否开启)
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# 增加加密算法以兼容老版本客户端
echo "PubkeyAcceptedKeyTypes=+ssh-rsa" >> /etc/ssh/sshd_config
# 调整密钥文件权限,避免 sshd 启动失败
chmod 600 /etc/ssh/ssh_host_*_key
# 更新 PAM 配置
cat > /etc/pam.d/sshd << EOF
#%PAM-1.0
auth required pam_sepermit.so
auth include password-auth
account required pam_nologin.so
account include password-auth
password include password-auth
session required pam_limits.so
session required pam_selinux.so close
session required pam_loginuid.so
session optional pam_keyinit.so force revoke
session include password-auth
EOF
# 重启 sshd 服务使配置生效
systemctl restart sshd
重要提示:完成上述步骤后,请不要立即关闭当前的 SSH 连接窗口。请新开一个 SSH 会话尝试连接,确认能正常登录后,即表示升级成功,可以平稳落地。
六、服务管理
安装并配置完成后,你可以使用以下命令管理 OpenSSH 服务:
# 启动服务
systemctl start sshd
# 设置开机自启
systemctl enable sshd
通过以上步骤,你可以快速将 CentOS 7 等系统的 OpenSSH 升级到新版本,及时修复安全漏洞。更多服务器运维与安全实践,欢迎在云栈社区交流探讨。
|