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

相关推荐
A小辣椒16 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒19 小时前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式