实现SSH服务自动化合规扫描需聚焦四类高危项:登录控制策略、会话与锁定机制、密钥与算法合规性、关键文件权限与属主;推荐用ssh-audit轻量巡检、InSpec声明式校验,并构建含备份、报告、修复建议的闭环脚本。

实现 SSH 服务的自动化合规扫描,关键在于选对工具、聚焦核心风险项,并把检查逻辑固化为可重复执行的流程。不是所有配置都需每轮全检,而是盯住那些一旦出错就可能被直接利用的高危点——比如 root 登录放开、密码认证未禁用、密钥算法过时、会话超时缺失等。
聚焦四类必检高危项
每次扫描应优先覆盖以下四类直接影响访问安全的配置:
-
登录控制策略:检查
PermitRootLogin no、PasswordAuthentication no、Protocol 2是否生效(可用sshd -T | grep -E "(permitrootlogin|passwordauthentication|protocol)"快速验证) -
会话与锁定机制:确认
ClientAliveInterval和ClientAliveCountMax已设(防长连接滞留),同时验证 PAM 层是否启用pam_tally2.so deny=5 unlock_time=900 -
密钥与算法合规性:用
ssh-audit --config /etc/ssh/sshd_config检查是否禁用ssh-rsa、diffie-hellman-group1-sha1等弱算法;远程扫描时加--no-color --level=info减少干扰 -
关键文件权限与属主:确保
/etc/ssh/sshd_config权限 ≤644 且属主为 root;/etc/shadow必须为600 root:root(用stat -c "%a %U:%G" /etc/shadow直接比对)
用 ssh-audit 实现轻量级自动巡检
ssh-audit 是纯 Python 工具,不依赖远程服务,适合嵌入脚本或 CI/CD 流程。它支持本地文件扫描和远程服务审计,输出清晰分级(HIGH/CRITICAL/WARN),并附带修复建议。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 本地扫描命令:
ssh-audit --config /etc/ssh/sshd_config --json > audit_$(date +%Y%m%d).json - 判断是否通过:
ssh-audit --config /etc/ssh/sshd_config 2>&1 | grep -q "HIGH\|CRITICAL",返回 0 表示存在高危项 - 批量扫描多台主机:配合
ansible使用community.general.ssh_audit模块,一次下发并聚合结果
用 InSpec 做声明式基线校验
InSpec 把合规要求写成可读性强的 Ruby DSL,天然适配 SSH 连接目标,适合部署后快速验证或定时巡检。
- 定义一个 Control 检查 SSH 配置:
describe sshd_config do<br> its('PermitRootLogin') { should eq 'no' }<br> its('PasswordAuthentication') { should eq 'no' }<br>end - 执行扫描:
inspec exec my-ssh-profile --target ssh://admin@192.168.1.100 --sudo --format json --report-path result.json - 输出结构化结果,失败项自动高亮,便于对接告警或修复流水线
构建闭环式巡检脚本
自动化不只是“扫完就完”,必须包含结果归档、问题汇总与轻量修复建议:
- 扫描前自动备份:
cp /etc/ssh/sshd_config{,.bak-$(date +%s)} - 扫描后生成带时间戳的报告目录,如
scan_results/20260709_0700/ - 若发现高危项,脚本末尾输出修复命令示例(如
sed -i '/^PermitRootLogin/c\PermitRootLogin no' /etc/ssh/sshd_config),并提示运行sshd -t && systemctl reload sshd - 退出码设为 1(当存在 HIGH/CRITICAL 项时),方便接入 Jenkins 或 GitLab CI 阻断不合规发布










