我有一个包含登录数据的日志文件,我需要生成一个报告,该报告总结所有失败的登录尝试并由用户进行组织。文件中的一行如下所示:
Jan 21 19:22:23 localhost sshd[1234]: Failed password for USER from 127.0.0.1 port 12345 ssh2 #IPs and such obscured, obviously
这USER
是我需要统计和总结的内容。该模式始终Failed password for USER
是有帮助的,但是awk -F
由于行上其他垃圾的数量,我无法执行其他字符串拆分工作。
如何计算每个失败的登录并将每个用户的总数加起来?
使用GNU grep,请尝试以下操作:
grep -Po "Failed password for \K.*?(?= from)" logfile.log | sort | uniq -c
-P
启用perl正则表达式,允许诸如之类的事情\K
。
-o
仅打印匹配的部分,而不打印包含匹配项的整行。
\K
使grep忘记之前匹配的部分,以便它不会出现在输出中。
.*?
匹配USER。仅此部分将被打印。
(?= from)
是确定USER何时结束所需的前瞻。
对于grep
USER的每次失败登录尝试,该部件都会打印USER。现在我们只需要计算每个用户的出现次数。这是用成语完成的sort | uniq -c
。
最终输出如下所示:
7 adam
2 bob
14 claire
输出按用户名排序。要按失败尝试的次数排序,请附加| sort -nr
到命令。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句