2025年12月,OpenSSH现CVE-2024-6387漏洞,这个漏洞的危害是:未经认证的远程攻击者可在 8.5p1 ≤ OpenSSH < 9.8p1 的服务器上触发竞态条件,以 root 身份直接执行任意代码,整个系统瞬间失陷。漏洞自发布以来,已经有网友复现了这一漏洞的攻击。
建议:把 OpenSSH 升级到 >9.8p1(推荐 9.9p1)。
1.登录系统检查OpenSSH版本
使用下面的命令检查你当前系统的OpenSSH版本,只要在8.5p1 ≤ OpenSSH < 9.8p1 之间都需要升级。
sshd -V
不幸的是大多数系统源中安装的openssh都是这在个区间的。
2.准备升级
目前各大发行版本的官方源是还没有最新的openssh补丁,所以只能手动升级了。
2.1 登录系统
首先保证你的系统还能远程登录,使用你顺手的终端在本地登录两次,这么做的目的是保证升级过程中如果有什么错误,在另一个未操作的登录终端中还能回滚。
2.2 准备升级脚本
使用下面的脚本进行升级适用系统:
- ubuntu 20.04/22.04/24.04
- Debian 11/12
fix-openssh.sh
#!/usr/bin/env bash
set -euo pipefail
TARGET_VER="9.9p1"
WORKDIR="/usr/local/src/openssh-build"
BACKUP_DIR="/root/openssh_backup_$(date +%F_%H-%M-%S)"
echo "=============================="
echo " OpenSSH regreSSHion 修复工具"
echo "=============================="
# Root check
if [[ $EUID -ne 0 ]]; then
echo "❌ 请使用 root 执行"
exit 1
fi
# 修复:添加超时保护,并使用更可靠的版本获取方式
echo "🔍 检测当前 OpenSSH 版本..."
# 方法1: 尝试从 dpkg (Debian/Ubuntu)
if command -v dpkg &>/dev/null; then
CUR_VER=$(dpkg -l | grep openssh-server | awk '{print $3}' | sed -n 's/.*:\([0-9.]*p[0-9]*\).*/\1/p' | head -n1)
fi
# 方法2: 如果方法1失败,使用 timeout 保护的 sshd -V
if [[ -z "${CUR_VER:-}" ]]; then
CUR_VER=$(timeout 3 sshd -V 2>&1 | head -n1 | sed -n 's/^OpenSSH_\([0-9.]*p[0-9]*\).*/\1/p' || true)
fi
# 方法3: 尝试 ssh -V
if [[ -z "${CUR_VER:-}" ]]; then
CUR_VER=$(ssh -V 2>&1 | sed -n 's/^OpenSSH_\([0-9.]*p[0-9]*\).*/\1/p')
fi
if [[ -z "$CUR_VER" ]]; then
echo "❌ 无法解析 OpenSSH 版本"
echo "尝试手动检查:"
timeout 3 sshd -V 2>&1 | head -n5 || ssh -V 2>&1
exit 1
fi
echo "✔ 当前 OpenSSH 版本: $CUR_VER"
# 版本比较(安全)
verlt() {
[[ "$(printf '%s\n%s\n' "$1" "$2" | sort -V | head -n1)" == "$1" ]] \
&& [[ "$1" != "$2" ]]
}
if ! verlt "$CUR_VER" "9.8p1"; then
echo "✔ 当前版本 ≥ 9.8p1,未受 CVE-2024-6387 影响"
exit 0
fi
echo "⚠ 当前版本处于 regreSSHion 风险区间,开始升级"
# 备份
mkdir -p "$BACKUP_DIR"
cp -a /etc/ssh "$BACKUP_DIR/"
echo "✔ SSH 配置已备份到 $BACKUP_DIR"
# 依赖
echo "🔧 安装编译依赖"
apt update
apt install -y \
build-essential \
libssl-dev \
zlib1g-dev \
libpam0g-dev \
libselinux1-dev \
libsystemd-dev \
pkg-config \
wget
# 下载
mkdir -p "$WORKDIR"
cd "$WORKDIR"
wget -nc https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-${TARGET_VER}.tar.gz
tar -xzf openssh-${TARGET_VER}.tar.gz
cd openssh-${TARGET_VER}
# 编译(Ubuntu 对齐)
./configure \
--prefix=/usr \
--sysconfdir=/etc/ssh \
--with-pam \
--with-systemd \
--with-privsep-path=/var/lib/sshd
make -j"$(nproc)"
make install
# 校验
sshd -t
# 重启
systemctl daemon-reexec
systemctl restart ssh
echo "=============================="
echo "✅ OpenSSH 已升级完成"
ssh -V
echo "=============================="
3.升级openssh
将以上脚本fix-openssh.sh上传到你的服务器,并为脚本赋可执行权限。
# 在脚本所在目录下执行
chmod +x fix-openssh.sh
# 切换成root用户
su
# 在root用户下执行脚本
./fix-openssh.sh
查看升级后的OpenSSH版本:
sshd -V
只要不在8.5p1 ≤ OpenSSH < 9.8p1区间就可以了。
以下是我升级后的截图

6801

被折叠的 条评论
为什么被折叠?



