Debian SSH日志如何查看与分析
小樊
44
2025-12-08 20:35:54
Debian SSH日志查看与分析
一 日志位置与关键要点
- Debian/Ubuntu 的 SSH 认证日志集中在:/var/log/auth.log。常见关键线索包括:
- 成功登录:Accepted password、Accepted publickey
- 失败尝试:Failed password、Failed publickey、invalid user
- 会话与提权:session opened for user(便于追踪 sudo 等后续行为)
- 系统级登录历史(非 SSH 专属):/var/log/wtmp(成功登录,配合 last)、/var/log/btmp(失败登录,配合 lastb)
- 使用 systemd 的系统也可用:journalctl -u ssh(按服务过滤),或按时间窗口查询:journalctl --since “2025-12-01” --until “2025-12-08”。
二 快速定位与常用命令
- 实时监控最新 SSH 事件
- tail -f /var/log/auth.log | grep --color=auto “sshd”
- 成功登录清单(含时间、用户、来源 IP)
- grep "Accepted " /var/log/auth.log | awk ‘{print $1,$2,$3,$9,$11}’
- 失败登录按 IP 排行(降序)
- grep “Failed password” /var/log/auth.log | awk ‘{print $11}’ | sort | uniq -c | sort -nr | head
- 失败登录按用户名排行(含无效用户)
- grep -E “Failed password for (invalid user )?\w+” /var/log/auth.log | sed -E ‘s/.for (invalid user )?([^ ]+)./\2/’ | sort | uniq -c | sort -nr | head
- 指定时间窗口(示例:今日 00:00–06:00)
- awk -v start=“$(date -d ‘today 00:00:00’ ‘+%H:%M:%S’)” -v end=“$(date -d ‘today 06:00:00’ ‘+%H:%M:%S’)” ‘$3 >= start && $3 <= end’ /var/log/auth.log | grep “Failed password”
- 查看失败登录历史(系统级)
- 查看当前在线与最近登录
- 归档与压缩日志(zgrep 直接检索 .gz)
- zgrep “Failed password” /var/log/auth.log.*.gz
三 日志字段解读与定位技巧
- 典型成功登录日志示例
- Feb 28 09:12:34 server sshd[12345]: Accepted publickey for alice from 192.168.1.100 port 54321 ssh2: RSA SHA256:abc123…
- 关键字段:时间、进程、事件类型、用户名、来源 IP、端口、协议/指纹
- 典型失败登录日志示例
- Apr 11 10:15:00 server sshd[1234]: Failed password for root from 203.0.113.45 port 41234 ssh2
- 或:Failed password for invalid user admin from 203.0.113.45 port 41235 ssh2
- 排查要点
- 优先关注高频来源 IP、高频目标 用户名(含 root、admin、test 等常见弱口令名)
- 异常时段(如深夜/节假日)出现的 Accepted 记录
- 伴随 session opened for user root 的提权行为
- 结合 last / lastb 校验是否存在异常登录与失败洪泛。
四 加固与自动化建议
- 基线加固(/etc/ssh/sshd_config)
- 禁用 root 远程登录:PermitRootLogin no
- 优先密钥认证:PasswordAuthentication no(确保已部署密钥)
- 可选:更改默认端口并限制可登录用户/组(如 AllowUsers、AllowGroups),变更前先备份并平滑重启 sshd
- 入侵处置与阻断
- 封禁可疑 IP:iptables -A INPUT -s -j DROP 或 fail2ban-client set sshd banip
- 强制下线可疑会话:pkill -u <用户名>;锁定高危账户:usermod -L <用户名>
- 持续监控与审计
- 集中化日志:使用 ELK/Graylog 对 auth.log 做可视化与告警
- 命令审计:配置 sudoers 记录输入/输出,必要时启用 auditd 做内核级审计
- 例行检查:定期复核 last / lastb、异常 sudo 命令、密钥指纹与授权清单。