SSH 日志管理与安全分析:配置、解读与暴力破解告警

SSH 日志记录了每一次远程登录尝试,是服务器安全的第一道情报来源。本文讲解 SSH 日志的存放位置、典型条目解读、LogLevel 与 SyslogFacility 配置、grep/awk/journalctl 分析命令,以及用观测云实现暴力破解实时告警的落地方案。

最佳实践
SSH 日志管理与安全分析:配置、解读与暴力破解告警技术指南封面

SSH 日志(SSH Log)是由 SSH 守护进程 sshd 生成的安全审计记录,涵盖登录成功/失败、认证方式、来源 IP、会话断开等全部远程访问事件,是发现暴力破解与未授权访问的核心数据源。 凡是有公网 IP 的服务器,SSH 日志里从不缺少"访客"——区别在于你是否在看。

核心要点速览

  • 日志位置:Debian/Ubuntu 在 /var/log/auth.log,RHEL/CentOS 在 /var/log/secure,systemd 系统用 journalctl -u ssh
  • 生产推荐 LogLevel VERBOSE——多记一行密钥指纹,审计价值远超存储成本;
  • 单机分析三板斧:grep 过滤失败记录、awk 统计 TOP 来源 IP、journalctl 按时间/级别过滤;
  • 持续安全监控的正确姿势:DataKit 采集 → Pipeline 结构化 → 观测云监控器对"失败次数突增、root 登录成功"实时告警。

SSH 日志存在哪里?

环境 位置/方式
Debian / Ubuntu /var/log/auth.log
RHEL / CentOS / Fedora /var/log/secure
systemd 系统 journalctl -u ssh(可加 -f 实时跟踪)

拿不准时可查配置确认:grep -i log /etc/ssh/sshd_config

典型日志条目解读

成功登录(密码/密钥)

Jul 17 15:45:23 web sshd[5678]: Accepted password for devuser from 10.0.2.15 port 49812 ssh2
Jul 17 15:49:45 web sshd[5680]: Accepted publickey for jenkins from 10.0.2.20 port 52413 ssh2: RSA SHA256:LmNo...

失败尝试(重点监控对象)

Jul 17 15:47:10 web sshd[5679]: Failed password for invalid user admin from 45.227.253.82 port 38654 ssh2

invalid user 表示对方尝试了一个系统上不存在的用户名——扫描探测的典型特征。

会话断开

Jul 17 16:02:33 web sshd[5678]: Disconnected from user devuser 10.0.2.15 port 49812

每条日志都包含五要素:时间、主机、进程(sshd[PID])、事件、来源(用户/IP/端口/协议)。

日志详细程度怎么调?

编辑 /etc/ssh/sshd_config

LogLevel VERBOSE
SyslogFacility AUTHPRIV
  • LogLevel 可选 QUIET/FATAL/ERROR/INFO/VERBOSE/DEBUG(1-3)。生产推荐 VERBOSE——成功登录会附带密钥指纹,事后审计能精确定位是哪把钥匙开的门。DEBUG 仅排障时临时开启;
  • SyslogFacility 决定日志归入哪个 syslog 设施,AUTHPRIV 访问受限更严格,适合认证类敏感日志。

改完执行 sudo systemctl restart sshd 生效。

单机分析:常用命令组合

# 所有失败登录
grep "Failed password" /var/log/auth.log

# 按来源 IP 统计失败次数,降序排列——暴力破解来源一目了然
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head

# journalctl 进阶过滤
journalctl -u ssh --since "1 hour ago"    # 最近一小时
journalctl -u ssh -p err                  # 仅错误级
journalctl -u ssh -f                      # 实时跟踪

排障速查

  • 用户报无法登录:先 grep "authentication failure" auth.log
  • 权限问题:grep "bad ownership or modes"——SSH 对 ~/.ssh(700)与 authorized_keys(600)权限极敏感;
  • 密钥被拒绝:grep "key_read" 相关记录。

集中监控:从"定期抽查"到"实时告警"

单机命令适合临时排查,但安全监控必须是 7×24 的。观测云落地

  1. 采集与结构化:DataKit 磁盘文件采集 auth.log/secure,Pipeline grok 切割出 usernamesrc_ipauth_method 等字段,含 Failed 的行标记 status = "error"Accepted 标记为 info
  2. 实时检索与聚类:日志查看器中按 src_ip 分组看攻击来源排行,聚类分析自动归并扫描器刷出的海量同类记录,新型攻击模式(如换了一批罕见用户名)即刻浮现 ;
  3. 监控器告警(监控 > 监控器 > 日志检测):
    • root 登录成功:出现 ≥1 条即触发,即时推送;
    • 暴力破解:同一 src_ip 5 分钟内失败 > 20 次触发;
    • 异常维度:密码认证成功(应全走密钥)、非白名单 IP/用户登录成功;
    • 告警策略绑定钉钉/企业微信/飞书通知对象,事件中心统一跟进;
  4. 配合加固:禁 root 直连、禁密码登录、改默认端口、Fail2Ban 封禁、MFA——监控发现规律,加固堵住入口,两者缺一不可。

总结

SSH 日志安全运营的要义:VERBOSE 级别保证证据完整,集中化保证不漏一台机器,监控器保证第一时间知道。命令行回答"刚才发生了什么",观测云回答"此刻全网每台机器正在发生什么"。

常见问题(FAQ)

Q:auth.log 里全是陌生 IP 的失败记录,服务器被入侵了吗?
失败记录本身不代表入侵——公网服务器被扫描是常态。需要警惕的信号是:出现 Accepted 的可疑成功登录、针对真实用户名的高频尝试、来自可信 IP 段的异常失败(可能内鬼或跳板失陷)。

Q:LogLevel DEBUG 能长期开吗?
不建议。DEBUG(尤其 DEBUG3)会记录大量会话细节,日志体积暴涨且可能含敏感信息。排障时临时开启,问题解决后调回 VERBOSE。

Q:如何区分自己的登录和攻击者的登录?
三点核对:来源 IP 是否在你的常用网络/跳板机白名单内、认证方式是否为密钥、登录时间是否符合你的工作时段。这正是要把成功登录也纳入告警并记录密钥指纹的原因。

Q:观测云里能直接看到"谁在扫我"的统计吗?
可以。日志查看器中按 src_ipstatus: error 的 SSH 日志做分组计数即可得到 TOP 攻击来源列表,该视图可导出到仪表板长期跟踪。


系列阅读:Linux 认证日志监控实战日志监控是什么

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台