OpenSSH需同时配置全局LogLevel(如DEBUG2)和模块化LogLevel AUTH DEBUG2才能完整记录认证细节,日志存于/var/log/auth.log或/var/log/secure,DEBUG3含敏感信息仅限临时排障。

OpenSSH 的日志级别直接影响你能看到多少身份验证细节,比如谁在什么时候尝试登录、用了什么密钥、是否失败、失败原因是什么。默认的 INFO 级别通常只记录成功登录和明显错误,想排查密码试错、公钥拒绝、用户不存在等问题,需要调高日志级别并确保关键模块(如 auth)被明确记录。
修改 sshd_config 中的日志级别
编辑 /etc/ssh/sshd_config,找到或添加以下两行:
-
LogLevel VERBOSE或更详细的LogLevel DEBUG1~DEBUG3(DEBUG2是最常用的选择,包含密钥指纹、认证方法切换、PAM 调用等) -
SyslogFacility AUTH(确保日志归类到auth设施,便于集中过滤)
注意:DEBUG3 会记录私钥解密过程等敏感信息,仅用于临时排障,不建议长期启用。
启用详细认证模块日志(关键步骤)
仅设 LogLevel 不够——OpenSSH 默认对部分子模块(尤其是公钥验证)使用比全局更低的日志等级。需显式启用详细记录:
- 在
sshd_config中添加:LogLevel AUTH DEBUG2 - 该写法表示:当日志来源为
auth子系统(如 pubkey、password、keyboard-interactive 验证环节)时,强制使用DEBUG2级别,覆盖全局INFO或VERBOSE - 重启服务生效:
sudo systemctl restart sshd
从 syslog 中查看和过滤验证日志
日志通常输出到 /var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(RHEL/CentOS)。常用查看方式:
- 实时跟踪登录事件:
sudo tail -f /var/log/auth.log | grep 'sshd\[' - 筛选失败的公钥尝试:
grep 'Failed publickey' /var/log/auth.log - 查某用户所有认证行为:
grep 'user=用户名' /var/log/auth.log - 显示带时间戳的最近 50 条 SSH 认证日志:
journalctl -u sshd -n 50 -o short-iso | grep 'pam_'(若使用 systemd-journald)
常见验证日志含义速查
开启 DEBUG2 后,典型日志片段及含义:
-
debug2: userauth-request for user alice service ssh-connection method publickey→ 用户 alice 尝试用公钥登录 -
debug1: trying public key ... SHA256:Abc123...→ 正在比对公钥指纹 -
Failed password for invalid user bob from 192.168.1.100 port 54321 ssh2→ 不存在的用户 bob 被暴力猜测 -
Connection closed by authenticating user alice port 12345 [preauth]→ 客户端在认证完成前断开(可能密钥不对或超时)
不复杂但容易忽略的是:必须同时设置全局 LogLevel 和 auth 模块的细化级别,否则看不到真正的验证决策过程。

















