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

相关推荐
程序员-Benothing3 小时前
Vim编辑器从入门到精通:模式、快捷键、配置、插件
linux·运维·服务器
m0_646429973 小时前
Docker 完整核心知识点总结(超通俗易懂版)
运维·docker·容器
‎ദ്ദിᵔ.˛.ᵔ₎3 小时前
linux 进程信号 (上)
linux·服务器
亚川楼宇自控系统数据中心厂家3 小时前
IBMS 集成管理系统:如何打通楼宇自控实现建筑一体化管控
运维
15Moonlight3 小时前
Linux网络(02):Socket 编程 UDP
linux·网络·udp
迪康Defender3 小时前
终端安全审批体系设计:如何平衡安全管控与业务连续性
运维·服务器·安全·运维开发·学习方法·业界资讯·远程工作
wuminyu4 小时前
ForkJoinPool窃取线程在扫描其他WorkQueue时的随机采样算法与Phase线程挂起唤醒机制解析
java·linux·c语言·jvm·c++
liulilittle4 小时前
Linux 下 select 测试函数
linux·服务器·网络·数据库·c++·select·c
DongQiShanRen5 小时前
玄龙(上):TICK 主循环——意识心跳怎么跳
linux·jvm·数据库·人工智能·数据挖掘·rust
小此方5 小时前
Linux网络(二十一):深入理解 TCP 异常处理:网线断开、Keepalive 保活机制与 Linux 内核传输层协议源码剖析
linux·网络·tcp/ip