网站搜索

如何在 Linux 中查找所有失败的 SSH 登录尝试


Linux 中的 rsyslog 守护进程会跟踪每次登录 SSH 服务器的尝试并将其记录到日志文件中。在 Linux 中列出所有失败的 SSH 登录尝试的最基本机制是借助 cat 命令或 grep 命令显示和过滤日志文件的组合。

要显示 Linux 中失败的 SSH 登录列表,请发出本指南中提供的一些命令。确保使用 root 权限执行这些命令。

列出所有失败的 SSH 登录的最简单命令如下所示。

grep "Failed password" /var/log/auth.log

通过发出 cat 命令也可以获得相同的结果。

cat /var/log/auth.log | grep "Failed password"

为了显示有关失败的 SSH 登录的额外信息,请发出如下示例所示的命令。

egrep "Failed|Failure" /var/log/auth.log

CentOSRHEL 中,失败的 SSH 会话记录在 /var/log/secure 文件中。针对此日志文件发出上述命令来识别失败的 SSH 登录。

egrep "Failed|Failure" /var/log/secure

上述命令的稍微修改版本用于显示 CentOS 或 RHEL 中失败的 SSH 登录,如下所示。

grep "Failed" /var/log/secure
grep "authentication failure" /var/log/secure

要显示尝试登录 SSH 服务器但失败的所有 IP 地址的列表以及每个 IP 地址的失败尝试次数,请发出以下命令。

grep "Failed password" /var/log/auth.log | awk ‘{print $11}’ | uniq -c | sort -nr

在较新的 Linux 发行版上,您可以通过 journalctl 命令查询 Systemd 守护进程维护的运行时日志文件。为了显示所有失败的 SSH 登录尝试,您应该通过 grep 过滤器传输结果,如以下命令示例所示。

journalctl _SYSTEMD_UNIT=ssh.service | egrep "Failed|Failure"
journalctl _SYSTEMD_UNIT=sshd.service | egrep "Failed|Failure"  #In RHEL, CentOS 

CentOSRHEL 中,将 SSH 守护程序单元替换为 sshd.service,如以下命令示例所示。

journalctl _SYSTEMD_UNIT=sshd.service | grep "failure"
journalctl _SYSTEMD_UNIT=sshd.service | grep "Failed"

在确定了经常访问 SSH 服务器以使用可疑用户帐户或无效用户帐户登录系统的 IP 地址后,您应该更新系统防火墙规则以阻止失败的 SSH 尝试 IP 地址或使用专门的 IP 地址。软件,例如fail2ban来管理这些攻击。