SSH 密钥审计日志如何做

作者:袖梨 2026-08-11

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

SSH 密钥审计日志不是“开个开关就自动出来”的事情,它需要把密钥使用行为、认证过程、命令执行三者串起来看。光靠 /var/log/auth.log/var/log/secure 里的几行记录,根本看不出谁用哪把密钥、连了几次、执行了什么命令。真正有效的密钥审计,得从配置、捕获、关联三个层面动手。

确认密钥登录已被详细记录

默认的 LogLevel INFO 只记“Accepted publickey”,不记密钥指纹、算法类型、甚至用户实际用的是哪一把密钥。必须改到 VERBOSE

  1. 编辑 /etc/ssh/sshd_config,确保有这一行:LogLevel VERBOSE
  2. 重启服务:sudo systemctl restart sshd
  3. 成功登录后,检查日志是否出现类似字段:

    sshd[12345]: debug1: key_parse_private_pem: PEM_read_PrivateKey failed

    sshd[12345]: Accepted publickey for alice from 192.168.1.10 port 56789 ssh2: RSA SHA256:AbCdEf...GhIj

    注意最后的 RSA SHA256:... 就是公钥指纹,这是溯源关键

捕获密钥对应的具体操作行为

日志里写了“Accepted”,但用户登进去干了什么?删库?改配置?默认 SSH 日志不记录这些。需要用 auditd 补上这一环:

  1. 启用 audit 规则,监控 execve 系统调用:

    sudo auditctl -a always,exit -F arch=b64 -S execve -k ssh_cmd

    b64 适配 x86_64;如是 32 位系统用 b32

  2. 确保 auditd 开机自启:sudo systemctl enable auditd
  3. 后续可通过 sudo ausearch -k ssh_cmd -i 查到某次登录后执行的所有命令,再结合前面的 SSH 日志时间戳和用户,就能把“哪把密钥→哪个用户→执行了什么”串起来

防止日志被篡改或绕过

攻击者一旦拿到权限,第一件事就是清日志。密钥审计的前提是日志可信:

  1. 锁定本地日志权限:sudo chmod 600 /var/log/auth.log /var/log/secure(RHEL/CentOS)或 /var/log/auth.log(Debian/Ubuntu)
  2. 配置 rsyslog 外发日志到独立日志服务器(不能和业务主机同机),例如在 /etc/rsyslog.d/50-remote.conf 中加:

    *.* @10.0.1.100:514(TCP)或 *.* @@10.0.1.100:514(可靠传输)

  3. 禁用普通用户对 journalctl 的访问:sudo groupadd -r adm,再把仅限运维加入该组,避免 journalctl --no-pager -u ssh 被滥用

日常核查与快速定位

有了数据,还得能快速查。几个实用命令:

  1. 查所有用密钥登录成功的记录(含指纹):

    sudo grep "Accepted publickey" /var/log/secure | awk '{print $9, $11, $(NF-1)}'

    输出示例:alice RSA SHA256:AbCdEf...GhIj

  2. 统计各密钥指纹的使用频次(可用于发现共享密钥或僵尸密钥):

    sudo grep "Accepted publickey" /var/log/secure | awk '{print $(NF-1)}' | sort | uniq -c | sort -nr

  3. 查某个指纹最近三次登录来源 IP:

    sudo grep "SHA256:AbCdEf...GhIj" /var/log/secure | tail -3 | awk '{print $11}'

相关文章

精彩推荐