Ubuntu 20.04 升级 OpenSSH 9.8p1 完整指南
背景介绍
安全警告
OpenSSH 8.5p1 至 9.7p1 版本之间存在严重安全漏洞,可能导致 Linux 系统遭受 root 权限的远程代码执行(RCE)攻击。为确保系统安全,强烈建议立即升级到最新版本。
升级目标
本指南将帮助您:
- 将 OpenSSH 从 8.2p1 升级至 9.8p1
- 同时升级 OpenSSL 从 1.1.1f 至 3.0.15
- 确保升级过程的安全性和稳定性
环境要求
- 操作系统:Ubuntu 20.04
- 当前 OpenSSH 版本:8.2p1
- 当前 OpenSSL 版本:1.1.1f
- 需要 root 权限
步骤一:准备工作
1.1 安装编译依赖包
在开始升级之前,需要安装必要的编译工具和依赖库:
apt update
apt install gcc make zlib1g-dev libpam0g-dev libkrb5-dev libedit-dev -y
1.2 检查当前版本
当前 OpenSSL 版本(Ubuntu 20.04 默认):
openssl version
输出:OpenSSL 1.1.1f

当前 OpenSSH 版本:
ssh -V
输出:OpenSSH_8.2p1

步骤二:升级 OpenSSL
为什么先升级 OpenSSL?
OpenSSH 依赖 OpenSSL,因此必须先升级 OpenSSL 才能确保 OpenSSH 正常工作。由于 OpenSSL 1.1.x 版本已停止维护,建议升级到 3.x 长期支持版本。
2.1 下载 OpenSSL 源码
访问 OpenSSL 官网 获取最新版本下载链接:
# 下载到指定目录
wget -P /usr/local/src https://www.openssl.org/source/openssl-3.3.2.tar.gz
# 或者下载 3.0.15 版本(本教程使用)
wget -P /usr/local/src https://www.openssl.org/source/openssl-3.0.15.tar.gz
2.2 编译安装 OpenSSL 3.0.15
# 进入源码目录
cd /usr/local/src/
# 解压源码
tar -zxf openssl-3.0.15.tar.gz
# 进入解压目录
cd openssl-3.0.15
# 配置编译参数
./config shared --prefix=/usr/local/openssl --openssldir=/usr/local/openssl

2.3 编译并安装
make clean && make && make install
编译耗时提醒
编译过程可能需要 10-30 分钟,请耐心等待。完成后可执行 echo $?
检查编译是否成功(返回 0 表示成功)。

2.4 配置新版本 OpenSSL
备份原有版本:
mv /usr/bin/openssl /usr/bin/openssl.bak
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

配置库文件路径:
# 注意:OpenSSL 3.x.x 版本使用 lib64 目录
echo '/usr/local/openssl/lib64' > /etc/ld.so.conf.d/openssl.conf
# 如果是 OpenSSL 1.x.x 版本,则使用:
# echo '/usr/local/openssl/lib' > /etc/ld.so.conf.d/openssl.conf

加载库文件:
ldconfig -v

验证升级结果:
openssl version

步骤三:升级 OpenSSH
3.1 下载 OpenSSH 源码
访问 OpenSSH 官方源码页面 下载最新版本:
wget -P /usr/local/src https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz
3.2 备份现有 SSH 相关文件
重要安全提醒
为防止升级失败导致无法远程连接,务必先备份原有的 SSH 文件。
创建备份目录并备份所有 SSH 相关文件:
# 创建备份目录
mkdir -p /usr/bin/bak /usr/sbin/bak
# 备份 SSH 客户端工具
cp -arpf /usr/bin/scp /usr/bin/bak/scp.bak
cp -arpf /usr/bin/sftp /usr/bin/bak/sftp.bak
cp -arpf /usr/bin/ssh /usr/bin/bak/ssh.bak
cp -arpf /usr/bin/ssh-add /usr/bin/bak/ssh-add.bak
cp -arpf /usr/bin/ssh-agent /usr/bin/bak/ssh-agent.bak
cp -arpf /usr/bin/ssh-keygen /usr/bin/bak/ssh-keygen.bak
cp -arpf /usr/bin/ssh-keyscan /usr/bin/bak/ssh-keyscan.bak
# 备份 SSH 服务端
cp -arpf /usr/sbin/sshd /usr/sbin/bak/sshd.bak
cp 命令参数说明
-a
(--archive):归档模式,保留所有文件属性(权限、时间戳、符号链接等)-r
(--recursive):递归复制目录-p
(--preserve):保留文件权限、所有权和时间戳-f
(--force):强制覆盖已存在的目标文件
3.3 编译安装 OpenSSH 9.8p1
解压源码并配置编译参数:
# 进入源码目录
cd /usr/local/src
# 解压源码包
tar -zxf openssh-9.8p1.tar.gz
# 进入解压目录
cd openssh-9.8p1
# 配置编译参数(指定依赖的 OpenSSL 路径)
./configure \
--prefix=/usr/local/openssh-9.8p1 \
--sysconfdir=/etc/ssh \
--with-kerberos5 \
--with-libedit \
--with-pam \
--with-gssapi \
--with-zlib \
--with-ssl-dir=/usr/local/openssl \
--with-privsep-path=/var/lib/sshd
# 编译并安装
make clean && make && make install

验证编译结果
编译完成后执行 echo $?
检查是否成功(返回 0 表示成功)。

3.4 替换系统 SSH 文件
将新编译的 OpenSSH 文件复制到系统目录:
# 复制客户端工具
cp -arpf /usr/local/openssh-9.8p1/bin/* /usr/bin/
# 复制服务端程序
cp -arpf /usr/local/openssh-9.8p1/sbin/* /usr/sbin/
步骤四:重启验证
4.1 重启 SSH 服务
# 重新加载 systemd 配置
systemctl daemon-reload
# 重启 SSH 服务
systemctl restart sshd
# 验证 SSH 版本
ssh -V

4.2 验证升级结果
检查各组件版本是否正确升级:
# 查看 OpenSSL 版本
openssl version
# 查看 OpenSSH 版本
ssh -V
# 查看 SSH 服务状态
systemctl status sshd
::: success 升级成功标志
- OpenSSL 版本显示为 3.0.15 或更高
- OpenSSH 版本显示为 9.8p1
- SSH 服务状态为 active (running)
:::
注意事项与故障排除
安全提醒
远程连接风险
- 升级过程中请保持当前 SSH 连接,不要断开
- 建议在物理机或 KVM 控制台可访问的情况下进行升级
- 如果是云服务器,确保有其他登录方式(如控制台、VNC 等)
常见问题
编译失败
- 检查依赖包是否完整安装
- 确认 OpenSSL 已正确安装和配置
SSH 服务无法启动
- 检查配置文件语法:
sshd -t
- 查看服务日志:
journalctl -u sshd
- 检查配置文件语法:
版本回退方法
# 如需回退到原版本 cp /usr/bin/bak/* /usr/bin/ cp /usr/sbin/bak/* /usr/sbin/ systemctl restart sshd
清理工作
升级成功后可选择清理临时文件:
# 清理源码文件(可选)
rm -rf /usr/local/src/openssl-3.0.15*
rm -rf /usr/local/src/openssh-9.8p1*
# 保留备份文件以备不时之需
# rm -rf /usr/bin/bak /usr/sbin/bak
总结
通过本指南,您已成功将 Ubuntu 20.04 系统的 OpenSSH 从 8.2p1 升级到 9.8p1,同时将 OpenSSL 从 1.1.1f 升级到 3.0.15,有效解决了已知的安全漏洞问题。
升级后的系统具备:
- ✅ 最新的安全特性和漏洞修复
- ✅ 更好的加密算法支持
- ✅ 改进的性能和稳定性