open-ssh漏洞修复

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区间就可以了。

以下是我升级后的截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

alfiy

请博主喝瓶矿泉水吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值