soarli

Ubuntu OpenSSH 升级权威指南:修复 CVE-2024-6387 漏洞(含手动与自动化脚本)
本文由AI辅助撰写,可能存在不准确之处,请读者注意甄别!前言近期,OpenSSH 披露了一个严重的安全漏洞 CVE...
扫描右侧二维码阅读全文
30
2025/09

Ubuntu OpenSSH 升级权威指南:修复 CVE-2024-6387 漏洞(含手动与自动化脚本)

本文由AI辅助撰写,可能存在不准确之处,请读者注意甄别!

前言

近期,OpenSSH 披露了一个严重的安全漏洞 CVE-2024-6387,该漏洞可能导致未经身份验证的远程攻击者执行任意代码,对服务器安全构成巨大威胁。作为 Linux 系统中最核心的远程管理服务,确保 OpenSSH 的安全是每位系统管理员的首要任务。

本文旨在提供一份详尽且权威的操作指南,帮助您将 Ubuntu 服务器上的 OpenSSH 升级到安全的 9.9p2 或更高版本。我们将提供两种升级策略:

  1. 手动分步执行:适合希望理解每一个步骤背后原理的管理员。
  2. 一键自动化脚本:适合需要在多台服务器上进行快速、标准化部署的场景。

准备工作:升级前的检查清单

在开始之前,请务必完成以下准备工作,以确保升级过程平稳、安全。

1. 权限与环境

  • 操作系统: 本指南适用于 Ubuntu 18.04, 20.04, 22.04 及更高版本。
  • 用户权限: 您需要拥有 sudoroot 权限来执行系统级操作。

2. !! 最重要的安全提醒 !!

在整个升级过程中,请务必保持当前的 SSH 连接窗口不要关闭!
因为操作会重启 SSH 服务,一旦配置失败,您可能会失去对服务器的访问权限。完成所有步骤后,请打开一个新的终端窗口尝试登录,确认新连接成功后,再关闭旧的连接窗口。

3. 网络代理设置 (如果需要)

如果您的服务器位于需要通过代理才能访问外部网络的环境,请先在终端中设置以下环境变量:

# 将地址和端口替换为您的实际代理
export http_proxy="http://your-proxy-address:port"
export https_proxy="http://your-proxy-address:port"

注意:后续 sudo 命令需要添加 -E 参数以继承这些环境变量。


策略一:手动分步升级(深入理解原理)

此方法将引导您完成从编译到替换的每一个步骤,让您清晰地了解底层发生了什么。

第1步:安装编译依赖

首先,我们需要安装编译 OpenSSH 源码所必需的工具和库文件。

# 更新软件包列表
sudo -E apt-get -y update

# 安装编译工具和依赖库
sudo -E apt-get install -y build-essential zlib1g-dev libssl-dev

第2步:下载、解压并编译源码

我们将从 OpenSSH 官方站点下载 9.9p2 版本的源码,并进行编译安装。

# 下载源码包
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p2.tar.gz

# 解压缩
tar -xzf openssh-9.9p2.tar.gz
cd openssh-9.9p2

# 配置、编译和安装 (默认会安装到 /usr/local 目录)
./configure
make
sudo make install

第3步:替换系统默认的 OpenSSH (核心)

新版本已安装到 /usr/local 目录,但系统默认使用的仍是 /usr/bin/usr/sbin 下的旧版本。我们需要手动替换它们。

# 1. 停止当前 SSH 服务
sudo systemctl stop ssh

# 2. 备份系统自带的 sshd (服务端) 和 ssh (客户端) 程序
sudo mv /usr/sbin/sshd /usr/sbin/sshd.bak
sudo mv /usr/bin/ssh /usr/bin/ssh.bak

# 3. 将新编译的程序复制到系统默认路径
sudo cp /usr/local/sbin/sshd /usr/sbin/sshd
sudo cp /usr/local/bin/ssh /usr/bin/ssh

第4步:更新 Systemd 服务配置

为确保系统服务能正确调用新版本的 sshd,我们需要更新服务文件中的路径。

sudo sed -i 's|/usr/sbin/sshd|/usr/local/sbin/sshd|g' /lib/systemd/system/ssh.service

第5步:重启服务并验证

最后,重新加载配置,启动服务,并验证版本号。

# 重新加载 systemd 配置
sudo systemctl daemon-reload

# 启动 SSH 服务
sudo systemctl start ssh

# 检查服务状态,确保 active (running)
sudo systemctl status ssh

# 验证版本号
ssh -V

如果一切顺利,您应该能看到 OpenSSH_9.9p2 的输出。


策略二:一键自动化脚本(高效部署)

对于需要快速部署或管理多台服务器的管理员,此脚本将所有手动步骤封装起来,实现一键式升级。

使用方法

  1. 将下面的脚本内容完整复制并保存到一个文件,例如 upgrade_openssh.sh
  2. 给脚本添加执行权限:chmod +x upgrade_openssh.sh
  3. 执行脚本:./upgrade_openssh.sh

自动化脚本

#!/bin/bash

# ==================================================================================
# OpenSSH 9.9p2 强制升级脚本
# ==================================================================================

# 设置脚本在遇到错误时立即退出
set -euo pipefail

# --- 定义一些颜色输出,方便观察 ---
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

echo -e "${GREEN}--- 开始执行 OpenSSH 9.9p2 强制升级脚本 ---${NC}"

# --- 步骤 1: 清理旧的源码文件 ---
echo -e "\n${YELLOW}>>> 步骤 1: 清理旧的源码文件...${NC}"
rm -rf openssh-9.9p2 openssh-9.9p2.tar.gz
echo "清理完成。"

# --- 步骤 2: 安装编译依赖 ---
echo -e "\n${YELLOW}>>> 步骤 2: 更新软件包列表并安装编译依赖...${NC}"
sudo -E apt-get -y update
sudo -E apt-get install -y build-essential zlib1g-dev libssl-dev
echo "依赖安装完成。"

# --- 步骤 3: 下载、解压并编译 OpenSSH 9.9p2 ---
echo -e "\n${YELLOW}>>> 步骤 3: 下载并编译 OpenSSH 9.9p2...${NC}"
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p2.tar.gz
tar -xzf openssh-9.9p2.tar.gz
cd openssh-9.9p2
echo "正在配置..."
./configure
echo "正在编译 (这可能需要几分钟)..."
make
echo "正在安装..."
sudo make install
cd ..
echo "编译安装完成。"

# --- 步骤 4: 替换系统默认的 OpenSSH ---
echo -e "\n${YELLOW}>>> 步骤 4: 停止服务并替换系统默认 OpenSSH 文件...${NC}"
sudo systemctl stop ssh
if [ -f /usr/sbin/sshd ]; then
    echo "备份 /usr/sbin/sshd -> /usr/sbin/sshd.bak"
    sudo mv /usr/sbin/sshd /usr/sbin/sshd.bak
fi
if [ -f /usr/bin/ssh ]; then
    echo "备份 /usr/bin/ssh -> /usr/bin/ssh.bak"
    sudo mv /usr/bin/ssh /usr/bin/ssh.bak
fi
echo "复制新版 OpenSSH 文件到系统目录..."
sudo cp /usr/local/sbin/sshd /usr/sbin/sshd
sudo cp /usr/local/bin/ssh /usr/bin/ssh
echo "更新 systemd 服务配置文件..."
sudo sed -i 's|/usr/sbin/sshd|/usr/local/sbin/sshd|g' /lib/systemd/system/ssh.service
echo "文件替换完成。"

# --- 步骤 5: 重新加载服务并验证 ---
echo -e "\n${YELLOW}>>> 步骤 5: 重启服务并进行最终验证...${NC}"
sudo systemctl daemon-reload
sudo systemctl start ssh
echo -e "\n--- 验证 SSH 服务状态 ---"
sudo systemctl status ssh --no-pager
echo -e "\n--- 验证 OpenSSH 版本 ---"
ssh -V

echo -e "\n${GREEN}=====================================================${NC}"
echo -e "${GREEN}脚本执行完毕!${NC}"
echo -e "${YELLOW}请立即打开一个新的终端窗口尝试SSH登录,以确认一切正常!${NC}"
echo -e "${GREEN}=====================================================${NC}"

升级后最终确认与回滚策略

最终确认

脚本或手动步骤执行完毕后,请务必从另一台机器或打开一个新的终端窗口,发起新的 SSH 连接
ssh user@your_server_ip
如果登录成功,并再次通过 ssh -V 确认版本为 9.9p2,则表示升级圆满成功。

紧急回滚策略

如果新版本导致无法登录,您可以通过云服务商的控制台或物理访问进入服务器,执行以下命令回滚到之前的版本:

# 停止服务
sudo systemctl stop ssh

# 恢复备份的旧版本文件
sudo mv /usr/sbin/sshd.bak /usr/sbin/sshd
sudo mv /usr/bin/ssh.bak /usr/bin/ssh

# 重新启动服务
sudo systemctl start ssh

这将使您的 SSH 服务恢复到升级前的状态。

总结

定期更新 OpenSSH 是保障服务器安全的关键措施之一。通过本文提供的手动或自动化方法,您可以有效地将系统 OpenSSH 升级到安全版本,从而抵御潜在的严重漏洞威胁。在操作时,请始终牢记安全第一,做好备份,并遵循警告提示,确保万无一失。

参考资料:

Ubuntu升级OpenSSH - 明心镜

最后修改:2025 年 09 月 30 日 01 : 23 PM

发表评论