漏洞修复 CentOS x86_64 OpenSSH 升级操作文档

1. 操作背景

  • 当前版本:OpenSSH_9.6p1, OpenSSL 3.0.12
  • 已知风险:OpenSSH < 10.0 存在 DisableForwarding 指令绕过漏洞。
  • 目标:升级至 OpenSSH 10.0 或以上版本,并保证可用性。

2. 操作前准备

2.1 创建虚拟机快照(强烈建议)

在 VMware/Hyper-V/云平台(如 OpenStack、阿里云、VMware ESXi)上运行时:

  • 进入管理平台,找到对应虚拟机 → 创建快照
    • 名称:before-openssh-upgrade-YYYYMMDD
    • 内容:包含内存和磁盘快照
  • 确认快照创建成功

2.2 开启控制台/串口登录方式

避免 SSH 失败后无法进入系统:

  • 确认云平台支持 VNC/控制台 登录
  • 或者预留 root 用户的本地终端 登录方式

2.3 备份 OpenSSH 配置

bash 复制代码
cp -av /etc/ssh /etc/ssh.bak.$(date +%F)
cp -av /usr/lib/systemd/system/sshd.service /root/sshd.service.bak.$(date +%F) 2>/dev/null

2.4 安装备用 SSH 服务(推荐)

避免升级失败后 SSH 服务不可用:

bash 复制代码
yum install -y telnet    # 或 dropbear

2.5 开启第二个 SSH 会话

升级过程中保持一个会话不动,另一个执行操作。


3. 升级步骤

升级前查询

bash 复制代码
[root@localhost ~]# ssh -V
OpenSSH_9.6p1, OpenSSL 3.0.12 24 Oct 2023
[root@localhost ~]# 

升级前创建虚机快照

平台操作

具体方法

在执行前

  • 先创建虚机快照
  • 保持两个 SSH 会话,一个执行脚本,一个备用
  • openssl 可能不兼容高版本,也需要升级

执行脚本

bash 复制代码
# openssl
https://openssl-library.org/source/
tar zxvf openssl-3.5.3.tar.gz
cd openssl-3.5.3
./config --prefix=/usr/local/openssl3 --openssldir=/usr/local/openssl3
make -j$(nproc)
make install

# 必要依赖(OpenSSH 10 编译需要)
yum groupinstall -y "Development Tools"
yum install -y zlib-devel pam-devel libselinux-devel perl

# 设置环境变量
export PATH=/usr/local/openssl3/bin:$PATH
export CPPFLAGS="-I/usr/local/openssl3/include"
export LDFLAGS="-L/usr/local/openssl3/lib64"
export PKG_CONFIG_PATH="/usr/local/openssl3/lib/pkgconfig"

# ssh
https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.0p2.tar.gz
cd /opt/openssh10
tar zxvf openssh-10.0p2.tar.gz
cd openssh-10.0p1

./configure --prefix=/opt/openssh10 \
            --sysconfdir=/etc/ssh \
            --with-md5-passwords \
            --with-privsep-path=/var/lib/sshd \
            --with-pam \
            --with-openssl=/usr/local/openssl3
make -j$(nproc)
make install

# -----------------------------
# 备份旧 SSH 并创建软链接
# -----------------------------
mv /usr/sbin/sshd /usr/sbin/sshd.old
mv /usr/bin/ssh /usr/bin/ssh.old


ln -s /opt/openssh10/bin/ssh /usr/bin/ssh
ln -s /opt/openssh10/sbin/sshd /usr/sbin/sshd

# 重启 sshd
systemctl restart sshd
systemctl status sshd


# 解决默认ssh为旧版本的问题
[root@localhost bin]# ssh -V
OpenSSH_9.6p1, OpenSSL 3.0.12 24 Oct 2023
[root@localhost bin]# /opt/openssh10/sbin/sshd -V
OpenSSH_10.0p2, OpenSSL 3.5.3 16 Sep 2025
[root@localhost bin]# 

# ~/ 表示当前账号所属路径,如 root 账号,则为 /root
echo 'export PATH=/usr/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

# 完成后
[root@localhost bin]# ssh -V
OpenSSH_10.0p2, OpenSSL 3.5.3 16 Sep 2025
[root@localhost bin]# /opt/openssh10/sbin/sshd -V
OpenSSH_10.0p2, OpenSSL 3.5.3 16 Sep 2025
[root@localhost bin]# 

验证

  • 新开一个 SSH 会话测试登录
  • ssh -V 应显示 OpenSSH_10.0p1

回退方法

bash 复制代码
mv /usr/sbin/sshd.old /usr/sbin/sshd
mv /usr/bin/ssh.old /usr/bin/ssh

systemctl daemon-reexec
systemctl restart sshd

回退方案

使用快照回滚

如果 SSH 完全不可用,直接恢复到 before-openssh-upgrade 快照。

使用备份恢复

参考上述 回退方法

使用备用登录方式

若 SSH 不可用,可通过 控制台 / telnet / dropbear 登录修复。

相关推荐
chlk1231 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑1 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件1 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
碳基沙盒1 天前
OpenClaw 多 Agent 配置实战指南
运维
xy123061 天前
OpenStack Train 部署实战(三)控制节点--keystone服务
centos·openstack
深紫色的三北六号1 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash2 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI2 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行3 天前
Linux和window共享文件夹
linux
木心月转码ing3 天前
WSL+Cpp开发环境配置
linux