SSH密钥审计需配置LogLevel VERBOSE记录指纹、用auditd捕获命令执行、外发日志防篡改,并通过日志关联实现“密钥→用户→操作”全链路追踪。

SSH 密钥审计日志不是“开个开关就自动出来”的事情,它需要把密钥使用行为、认证过程、命令执行三者串起来看。光靠 /var/log/auth.log 或 /var/log/secure 里的几行记录,根本看不出谁用哪把密钥、连了几次、执行了什么命令。真正有效的密钥审计,得从配置、捕获、关联三个层面动手。
确认密钥登录已被详细记录
默认的 LogLevel INFO 只记“Accepted publickey”,不记密钥指纹、算法类型、甚至用户实际用的是哪一把密钥。必须改到 VERBOSE:
- 编辑
/etc/ssh/sshd_config,确保有这一行:LogLevel VERBOSE - 重启服务:
sudo systemctl restart sshd - 成功登录后,检查日志是否出现类似字段:
sshd[12345]: debug1: key_parse_private_pem: PEM_read_PrivateKey failedsshd[12345]: Accepted publickey for alice from 192.168.1.10 port 56789 ssh2: RSA SHA256:AbCdEf...GhIj
注意最后的RSA SHA256:...就是公钥指纹,这是溯源关键
捕获密钥对应的具体操作行为
日志里写了“Accepted”,但用户登进去干了什么?删库?改配置?默认 SSH 日志不记录这些。需要用 auditd 补上这一环:
宝塔面板11.3.0是一款针对Linux服务器设计的可视化管理工具,通过重构核心模块实现资源占用显著降低,尤其适合低配置服务器环境。它将复杂的命令行操作转化为直观的图形界面,帮助开发者快速完成网站部署、环境配置及日常运维工作,无需专业技术背景即可高效管理服务器。
- 启用 audit 规则,监控 execve 系统调用:
sudo auditctl -a always,exit -F arch=b64 -S execve -k ssh_cmd
(b64适配 x86_64;如是 32 位系统用b32) - 确保
auditd开机自启:sudo systemctl enable auditd - 后续可通过
sudo ausearch -k ssh_cmd -i查到某次登录后执行的所有命令,再结合前面的 SSH 日志时间戳和用户,就能把“哪把密钥→哪个用户→执行了什么”串起来
防止日志被篡改或绕过
攻击者一旦拿到权限,第一件事就是清日志。密钥审计的前提是日志可信:
- 锁定本地日志权限:
sudo chmod 600 /var/log/auth.log /var/log/secure(RHEL/CentOS)或/var/log/auth.log(Debian/Ubuntu) - 配置
rsyslog外发日志到独立日志服务器(不能和业务主机同机),例如在/etc/rsyslog.d/50-remote.conf中加:*.* @10.0.1.100:514(TCP)或*.* @@10.0.1.100:514(可靠传输) - 禁用普通用户对
journalctl的访问:sudo groupadd -r adm,再把仅限运维加入该组,避免journalctl --no-pager -u ssh被滥用
日常核查与快速定位
有了数据,还得能快速查。几个实用命令:
- 查所有用密钥登录成功的记录(含指纹):
sudo grep "Accepted publickey" /var/log/secure | awk '{print $9, $11, $(NF-1)}'
输出示例:alice RSA SHA256:AbCdEf...GhIj - 统计各密钥指纹的使用频次(可用于发现共享密钥或僵尸密钥):
sudo grep "Accepted publickey" /var/log/secure | awk '{print $(NF-1)}' | sort | uniq -c | sort -nr - 查某个指纹最近三次登录来源 IP:
sudo grep "SHA256:AbCdEf...GhIj" /var/log/secure | tail -3 | awk '{print $11}'

















