漏洞修复 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 登录修复。

相关推荐
maosheng11468 小时前
RHCSA的第一次作业
linux·运维·服务器
wifi chicken9 小时前
Linux 端口扫描及拓展
linux·端口扫描·网络攻击
旺仔.2919 小时前
Linux 信号详解
linux·运维·网络
放飞梦想C9 小时前
CPU Cache
linux·cache
Hoshino.4110 小时前
基于Linux中的数据库操作——下载与安装(1)
linux·运维·数据库
恒创科技HK10 小时前
通用型云服务器与计算型云服务器:您真正需要哪些配置?
运维·服务器
吴佳浩 Alben11 小时前
GPU 生产环境实践:硬件拓扑、显存管理与完整运维体系
运维·人工智能·pytorch·语言模型·transformer·vllm
播播资源11 小时前
CentOS系统 + 宝塔面板 部署 OpenClaw源码开发版完整教程
linux·运维·centos
源远流长jerry12 小时前
在 Ubuntu 22.04 上配置 Soft-RoCE 并运行 RDMA 测试程序
linux·服务器·网络·tcp/ip·ubuntu·架构·ip
学不完的12 小时前
Docker数据卷管理及优化
运维·docker·容器·eureka