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

相关推荐
I · T · LUCKYBOOM1 天前
iptables防火墙
linux·运维·服务器·网络·安全
山上三树1 天前
main()函数带参数的用法
linux·c语言
凌波粒1 天前
Linux-Ubuntu系统环境搭建
linux·运维·ubuntu
鸠摩智首席音效师1 天前
如何在 Linux 中使用 uptime 命令 ?
linux·运维·服务器
HalvmånEver1 天前
Linux:匿名管道(进程间通信二)
linux·运维·服务器
lengjingzju1 天前
一网打尽Linux IPC(一):进程间通信完全指南——总体介绍
linux·服务器·c语言
阿豪学编程1 天前
【Linux】进程信号深度解析
linux·运维·服务器
10000hours1 天前
【Vim】vim常用命令:查找&编辑&可视区块
linux·编辑器·vim
chenyuhao20241 天前
Linux网络编程:HTTP协议
linux·服务器·网络·c++·后端·http·https
广东大榕树信息科技有限公司1 天前
动环监控如何有效提升机房环境管理的可靠性与响应速度?
运维·网络·物联网·国产动环监控系统·动环监控系统