
Fleet-scale CVE-2026-31431 audit and remediation orchestrator for Linux hosts via SSH, with strict host-key verification and multi-format reporting.
本项目用于在企业内网中对 Linux 资产进行 CVE-2026-31431 的批量巡检与修复编排。
algif_aead)>=3.13uvuv sync
项目已在 pyproject.toml 配置清华源:
[tool.uv]
index-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
复制示例文件并按实际环境修改:
cp fleet.env.example fleet.env
uv run python main.py fleet.env
.
├── main.py
├── pyproject.toml
├── uv.lock
├── fleet.env.example
├── reports/
└── src/
├── main.py
├── models.py
├── config.py
├── executor.py
├── collector.py
├── analyzer.py
├── adapters.py
├── remediator.py
├── orchestrator.py
└── reporter.py
配置文件是 KEY=VALUE 形式。空行和 # 注释会被忽略。
MODE
audit:仅检测,不执行修复。fix:检测后按策略执行缓解与修复。auditAUTO_REBOOT
0 或 10MODE=fix 且修复流程成功时生效。SSH_TIMEOUT
12MAX_WORKERS
8REPORT_DIR
./reportsPROGRESS_HEARTBEAT_SECONDS
5DEVICE_MAX_DURATION_SECONDS
1800PROGRESS_LOG_TO_FILE
REPORT_DIR。0 或 11FLEET_COUNT
1..FLEET_COUNT 读取)。DEVICE_n_HOST 为空会自动跳过该设备。每台设备通过 DEVICE_{n}_ 前缀定义,例如 DEVICE_1_*、DEVICE_2_*。
DEVICE_n_NAME
device_n。DEVICE_n_HOST
DEVICE_n_PORT
22DEVICE_n_USER
rootDEVICE_n_PASSWORD
DEVICE_n_KEY 二选一或同时提供。fleet.env 显式配置的密码或私钥,不会使用系统默认 SSH key/agent。DEVICE_n_KEY
./keys/node-1_ed25519DEVICE_n_PASSWORD 且未配置 DEVICE_n_KEY,连接会直接失败并提示配置错误。DEVICE_n_SUDO_PASSWORD
# =========================
# Global
# =========================
MODE=audit
AUTO_REBOOT=0
SSH_TIMEOUT=12
MAX_WORKERS=8
REPORT_DIR=./reports
PROGRESS_HEARTBEAT_SECONDS=5
DEVICE_MAX_DURATION_SECONDS=1800
PROGRESS_LOG_TO_FILE=1
FLEET_COUNT=3
# =========================
# Device 1
# =========================
DEVICE_1_NAME=pve-node-1
DEVICE_1_HOST=192.168.1.10
DEVICE_1_PORT=22
DEVICE_1_USER=root
DEVICE_1_PASSWORD=
DEVICE_1_KEY=./keys/pve-node-1_ed25519
DEVICE_1_SUDO_PASSWORD=
# =========================
# Device 2
# =========================
DEVICE_2_NAME=web-1
DEVICE_2_HOST=192.168.1.20
DEVICE_2_PORT=22
DEVICE_2_USER=admin
DEVICE_2_PASSWORD=your_ssh_password
DEVICE_2_KEY=
DEVICE_2_SUDO_PASSWORD=your_sudo_password
# =========================
# Device 3
# =========================
DEVICE_3_NAME=
DEVICE_3_HOST=192.168.1.30
DEVICE_3_PORT=22
DEVICE_3_USER=ops
DEVICE_3_PASSWORD=
DEVICE_3_KEY=./keys/db-1_ed25519
DEVICE_3_SUDO_PASSWORD=
MODE=audit
uv run python main.py fleet.env
行为:
MODE=fix
AUTO_REBOOT=0
uv run python main.py fleet.env
行为:
/etc/modprobe.d/disable-cve-2026-31431-algif-aead.confalgif_aeadAUTO_REBOOT 决定是否自动重启SAFE
algif_aead 未加载。MITIGATED
NEEDS_PATCH
algif_aead 可用或已加载,且缺少明确补丁线索。UNKNOWN
FAILED
每次执行会在 REPORT_DIR 输出 3 份报告:
cve_2026_31431_时间戳.jsoncve_2026_31431_时间戳.csvcve_2026_31431_时间戳.mdprogress_时间戳.log(实时进度与心跳日志)核心字段:
name, hoststatuskernel, osalgif_loaded, algif_availablepatch_hintfixed, rebootederrorfleet.env、私钥文件提交到 Git。audit,后 fix,再复检。ModuleNotFoundError: No module named 'paramiko'
uv sync 安装依赖。FAILED 数量较多
BadHostKeyException(主机指纹冲突)
known_hosts 记录不一致。fleet.env 显式配置的密码/私钥。ssh-keygen -R 目标IPssh-keyscan -H 目标IP >> $env:USERPROFILE\.ssh\known_hostsServer ... not found in known_hosts
known_hosts 尚无该主机记录。修复后未生效
AUTO_REBOOT 或手动维护窗口重启。