跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash

CentOS 7.x 系统 OpenSSH 与 OpenSSL 安全升级操作指南

CentOS 7.x 环境下通过编译源码方式将 OpenSSH 和 OpenSSL 升级至最新安全版本的操作流程。内容涵盖漏洞背景分析、系统备份、依赖安装、源码下载编译配置、服务替换验证及回滚方案。特别强调了使用 Telnet 作为临时应急通道以确保 SSH 升级失败后仍可恢复系统,并包含清理临时账号与端口的收尾步骤。

开源信徒发布于 2025/11/26更新于 2026/7/2642 浏览
CentOS 7.x 系统 OpenSSH 与 OpenSSL 安全升级操作指南

CentOS 7.x 升级 OpenSSH 与 OpenSSL 安全版本

背景

OpenSSH(OpenBSD Secure Shell)是用于安全远程访问的连接工具。它是 SSH 协议的开源实现,通过加密所有传输数据,有效防止窃听、连接劫持及其他网络攻击。

相关安全漏洞

以下是需要通过升级 OpenSSH 和 OpenSSL 修复的已知安全漏洞:

  • CVE-2023-28531:影响 OpenSSH 9.3p2 及更早版本,源于 ssh-agent 的 PKCS11 功能存在安全缺陷,攻击者可利用此漏洞执行远程代码。
  • CVE-2023-38408:同上,涉及 ssh-agent 的 PKCS11 功能,存在远程代码执行风险。
  • CVE-2023-48795:影响 OpenSSH 10.0 及更早版本,DisableForwarding 指令未正确禁用 X11 和代理转发,可能导致未授权访问。
  • CVE-2023-51385:同上,涉及转发功能的配置缺陷。
  • CVE-2025-26465 和 CVE-2025-32728:影响 OpenSSH 10.0 及更早版本,具体细节待披露,但建议尽早升级以确保安全。
修复方法

本文旨在修复上述漏洞,将 CentOS 7.x 系统的 OpenSSH 升级至最新稳定版,并将 OpenSSL 升级至 3.5.4。这些版本包含针对上述漏洞的修复补丁,可显著提升系统安全性。

一、前置准备

1. 确认系统版本
cat /etc/redhat-release
# 输出示例:CentOS Linux release 7.8.2003 (Core)
openssl version
# 输出示例:OpenSSL 1.1.1n 15 Mar 2022
2. 以 root 身份操作
sudo -i
3. 备份关键数据
BACKUP_TIME=$(date +%Y%m%d%H%M%S)
mkdir -p /root/backup_$BACKUP_TIME

# 备份 OpenSSL 相关
cp -r /usr/bin/openssl /root/backup_$BACKUP_TIME/
cp -r /usr/include/openssl /root/backup_$BACKUP_TIME/

# 备份 SSH 相关
cp -rp /etc/ssh /root/backup_$BACKUP_TIME/
cp -rp /usr/local/openssh /root/backup_$BACKUP_TIME/
cp -rp /usr/local/openssl /root/backup_$BACKUP_TIME/
cp /usr/sbin/sshd /root/backup_/sshd.old
 /usr/bin/ssh /root/backup_/ssh.old
$BACKUP_TIME
cp
$BACKUP_TIME
4. 更换阿里云 yum 源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
yum clean all
yum makecache

安装 Telnet(应急通道)

注意:以下操作确认 Telnet 能登录后再继续!确保在 SSH 升级失败时仍可恢复系统。

yum install -y epel-release
yum install -y telnet telnet-server xinetd
配置 xinetd 中的 telnet 服务
cat > /etc/xinetd.d/telnet <<'EOF'
service telnet {
    disable = no
    flags = REUSE
    socket_type = stream
    wait = no
    user = root
    server = /usr/sbin/in.telnetd
    log_on_failure += USERID
}
EOF
启动服务
systemctl enable xinetd
systemctl restart xinetd
开放防火墙
if systemctl is-active --quiet firewalld; then
    firewall-cmd --permanent --add-port=23/tcp
    firewall-cmd --reload
fi
创建临时用户
useradd -m -s /bin/bash opi
echo 'opi:!QAZ@WSX' | chpasswd
配置 sudo
# 允许 sudo(可选)
echo "opi ALL=(ALL:ALL) ALL" > /etc/sudoers.d/opi-perms
chmod 0440 /etc/sudoers.d/opi-perms

升级 OpenSSL

安装编译依赖
yum install -y gcc gcc-c++ make perl perl-devel perl-IPC-Cmd perl-Data-Dumper perl-Time-Piece perl-CPAN zlib-devel perl-Test-Simple
下载源码包
cd /tmp
sudo wget https://github.com/openssl/openssl/releases/download/openssl-3.5.4/openssl-3.5.4.tar.gz
# 内网环境请替换为本地路径
tar -zxvf openssl-3.5.4.tar.gz
cd openssl-3.5.4
编译配置
./Configure --prefix=/usr/local/openssl shared zlib
编译
make -j$(nproc)
安装
make test && make install
创建系统链接
# 备份旧版
mv /usr/bin/openssl /usr/bin/openssl.bak_$(date +%Y%m%d) 2>/dev/null || true

# 创建新链接
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -sf /usr/local/openssl/include/openssl /usr/include/openssl

# 配置动态库
echo "/usr/local/openssl/lib64" > /etc/ld.so.conf.d/openssl.conf
ldconfig
验证 OpenSSL 版本
openssl version
# 应输出:OpenSSL 3.5.4 ...

升级 OpenSSH

停止 SSH 服务

注意:此步骤请在保证 Telnet 可登录情况下执行(重要)

systemctl stop sshd
pkill sshd
卸载旧版 OpenSSH
rpm -qa | grep openssh
yum remove -y openssh openssh-server openssh-clients
# 强制清除残留(如果还有)
rpm -e --nodeps $(rpm -qa | grep openssh) 2>/dev/null || true
安装编译依赖
yum install -y pcre-devel pam-devel zlib-devel
下载 OpenSSH
cd /tmp
mkdir ssh_install && cd ssh_install
sudo wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.2p1.tar.gz
# 内网环境请替换为本地路径
tar -zxf openssh-10.2p1.tar.gz
cd openssh-10.2p1
清理旧版目录
rm -rf /usr/local/openssh/
配置编译
# 关键:指定 OpenSSL 路径
./configure \
  --prefix=/usr/local/openssh \
  --with-ssl-dir=/usr/local/openssl \
  --with-zlib \
  --with-pam \
  --sysconfdir=/etc/ssh
# 出现以下内容表示正常
PAM is enabled. You may need to install a PAM control file for sshd, otherwise password authentication may fail.
Example PAM control files can be found in the contrib/ subdirectory
编译安装
make -j$(nproc)
make install

配置新 SSH 服务

复制二进制文件
cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
cp /usr/local/openssh/bin/ssh /usr/bin/ssh
cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
还原配置文件
cp /root/backup_*/ssh/sshd_config /etc/ssh/sshd_config
# 提示是否覆盖时输入 y
启动 SSH 服务
systemctl daemon-reload
systemctl start sshd
systemctl enable sshd
验证版本
ssh -V
# 输出示例:OpenSSH_10.2p1, OpenSSL 3.5.4 30 Sep 2025
验证升级结果
echo "=== OpenSSL 版本 ==="
openssl version
echo "=== OpenSSH 版本 ==="
ssh -V
echo "=== 服务状态 ==="
systemctl is-active sshd
echo "=== 监听端口 ==="
ss -ltn | grep ':22'

清理与收尾

清理软件包
rm -rf /tmp/openssl-3.5.4 /tmp/ssh_install
卸载 Telnet 服务
# 停止 xinetd(Telnet 依赖它运行)
systemctl stop xinetd
# 禁用开机启动
systemctl disable xinetd

# 卸载 Telnet 软件包
yum remove -y telnet-server xinetd telnet

# 删除 Telnet 配置文件
rm -f /etc/xinetd.d/telnet
关闭防火墙 23 端口
if systemctl is-active --quiet firewalld; then
    firewall-cmd --permanent --remove-port=23/tcp
    firewall-cmd --reload
    echo "防火墙已关闭 23 端口"
else
    echo "firewalld 未运行,跳过防火墙配置"
fi
清理临时账号
# 删除用户及其家目录
userdel -r opi
# 删除 sudo 权限文件
rm -f /etc/sudoers.d/opi-perms
检查
echo "=== 检查是否还有 telnet 相关进程 ==="
ps aux | grep -E "(telnet|xinetd)" | grep -v grep || echo "无残留进程"
echo "=== 检查软件包是否卸载 ==="
rpm -q telnet-server xinetd telnet || echo "已全部卸载"
echo "=== 检查用户是否删除 ==="
id opi && echo "用户仍存在!" || echo "用户已删除"
echo "=== 检查 23 端口是否关闭 ==="
ss -ltn | grep ':23' || echo "23 端口已关闭"
echo "=== 检查防火墙规则 ==="
firewall-cmd --list-ports | grep 23 || echo "防火墙无 23 端口规则"

回滚

使用 Telnet + opi 用户登录

# 恢复旧版 OpenSSL
mv /usr/bin/openssl.bak_* /usr/bin/openssl
ldconfig

# 恢复旧版 SSH
cp /root/backup_*/sshd.old /usr/sbin/sshd
cp /root/backup_*/ssh.old /usr/bin/ssh
cp -r /root/backup_*/etc/ssh /etc/ssh
systemctl start sshd

常见问题

缺失 Perl 模块

Can't locate Test/More.pm in @INC (@INC contains: /tmp/openssl-3.5.4/util/perl ...)

这个问题是由于系统缺失 Perl 模块 Test::More(属于 Test-Simple 套件),该模块是 OpenSSL 测试套件必需的依赖项。

解决方法

# RedHat/CentOS 系列
yum install -y perl-Test-Simple
# Debian/Ubuntu 系列
apt-get install -y libtest-simple-perl

安装后重新运行测试:make test

OpenSSL 头文件版本不匹配

在编译 Openssh 时出现 configure: error: OpenSSL version test program failed.

OpenSSL 头文件(opensslv.h)中的版本号与实际的库文件版本(libssl.so)不一致,导致配置脚本检测失败。

编译参数如下:

# 关键:指定 OpenSSL 路径
./configure \
  --prefix=/usr/local/openssh \
  --with-ssl-dir=/usr/local/openssl \
  --with-zlib \
  --with-pam \
  --sysconfdir=/etc/ssh

解决方法

# 检查头文件版本
grep OPENSSL_VERSION_TEXT /usr/local/openssl/include/openssl/opensslv.h
# 检查库文件版本
openssl version

通过验证两个 OpenSSL 版本都是一致的。

# 删除 /usr/local/openssl 目录
mv /usr/local/openssl/ /tmp/openssl.bak
cd openssl-3.5.4/
./Configure --prefix=/usr/local/openssl shared zlib
# 重新编译并安装 OpenSSL
make -j$(nproc)
make install

重新编译 OpenSSH

./configure \
  --prefix=/usr/local/openssh \
  --with-ssl-dir=/usr/local/openssl \
  --with-zlib \
  --with-pam \
  --sysconfdir=/etc/ssh

make -j$(nproc)
make install

目录

  1. CentOS 7.x 升级 OpenSSH 与 OpenSSL 安全版本
  2. 背景
  3. 相关安全漏洞
  4. 修复方法
  5. 一、前置准备
  6. 1. 确认系统版本
  7. 输出示例:CentOS Linux release 7.8.2003 (Core)
  8. 输出示例:OpenSSL 1.1.1n 15 Mar 2022
  9. 2. 以 root 身份操作
  10. 3. 备份关键数据
  11. 备份 OpenSSL 相关
  12. 备份 SSH 相关
  13. 4. 更换阿里云 yum 源
  14. 安装 Telnet(应急通道)
  15. 配置 xinetd 中的 telnet 服务
  16. 启动服务
  17. 开放防火墙
  18. 创建临时用户
  19. 配置 sudo
  20. 允许 sudo(可选)
  21. 升级 OpenSSL
  22. 安装编译依赖
  23. 下载源码包
  24. 内网环境请替换为本地路径
  25. 编译配置
  26. 编译
  27. 安装
  28. 创建系统链接
  29. 备份旧版
  30. 创建新链接
  31. 配置动态库
  32. 验证 OpenSSL 版本
  33. 应输出:OpenSSL 3.5.4 ...
  34. 升级 OpenSSH
  35. 停止 SSH 服务
  36. 卸载旧版 OpenSSH
  37. 强制清除残留(如果还有)
  38. 安装编译依赖
  39. 下载 OpenSSH
  40. 内网环境请替换为本地路径
  41. 清理旧版目录
  42. 配置编译
  43. 关键:指定 OpenSSL 路径
  44. 出现以下内容表示正常
  45. 编译安装
  46. 配置新 SSH 服务
  47. 复制二进制文件
  48. 还原配置文件
  49. 提示是否覆盖时输入 y
  50. 启动 SSH 服务
  51. 验证版本
  52. 输出示例:OpenSSH_10.2p1, OpenSSL 3.5.4 30 Sep 2025
  53. 验证升级结果
  54. 清理与收尾
  55. 清理软件包
  56. 卸载 Telnet 服务
  57. 停止 xinetd(Telnet 依赖它运行)
  58. 禁用开机启动
  59. 卸载 Telnet 软件包
  60. 删除 Telnet 配置文件
  61. 关闭防火墙 23 端口
  62. 清理临时账号
  63. 删除用户及其家目录
  64. 删除 sudo 权限文件
  65. 检查
  66. 回滚
  67. 恢复旧版 OpenSSL
  68. 恢复旧版 SSH
  69. 常见问题
  70. 缺失 Perl 模块
  71. RedHat/CentOS 系列
  72. Debian/Ubuntu 系列
  73. OpenSSL 头文件版本不匹配
  74. 关键:指定 OpenSSL 路径
  75. 检查头文件版本
  76. 检查库文件版本
  77. 删除 /usr/local/openssl 目录
  78. 重新编译并安装 OpenSSL
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 7 个提升数据工程与开发效率的实用 Python 库
  • GitHub 学生开发者包认证操作指南
  • Go Channel 深入解析
  • Whisper-Large-V3-Turbo 语音识别模型一键部署指南
  • 鸿蒙金融理财全栈项目:风险控制、合规审计与产品创新
  • Raphael AI:基于 Flux 模型的免费 AI 图像生成工具
  • 视觉语言模型(VLM)综述:训练、评估与扩展指南
  • AI Agent 实战:从零搭建生产级框架与核心实现
  • 前端高频场景面试题:Vue 开发、性能优化与兼容性实战
  • Cherry Studio 本地 AI 模型远程访问与配置实战
  • Java 类加载机制详解
  • Vercel 部署指南:从 GitHub 连接至自定义域名上线
  • WSL Ubuntu 无法启动的修复与数据恢复方案
  • Python+AI 三大高性价比赛道与学习路径指南
  • Czkawka/Krokiet:基于 Rust 的跨平台系统清理工具技术解析
  • Stable Diffusion 3.5 FP8 模型架构解析与优化技巧
  • Python 进阶:68 个内置函数的分类图谱与组合实战
  • GitHub Copilot Workspace 100 万 Token 上下文评测
  • 重要算法思想:贪心、二分、正难则反、多重与完全背包精练
  • IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini)

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online