分析 一个月 SSH 成功登录情况 全部四个的版本
由于基本日志和三月的日志不在一个地方 ,所以要一并过滤
用:grep Accepted /tmp/secure-202303* /tmp/secure
要在CentOS 7中一并过滤出多个SSH日志文件里的“Accepted”成功登录记录,可以使用 grep
命令结合通配符来匹配多个目标日志文件。
命令示例(根据你的日志文件场景):
grep Accepted /tmp/secure-202303* /tmp/secure
命令解释:
grep Accepted
:筛选包含字符串Accepted
的行(SSH 成功登录通常会包含该关键词)。/tmp/secure-202303*
:用通配符*
匹配以secure-202303
开头的所有日志文件(比如/tmp/secure-20230326
这类带日期后缀的文件)。/tmp/secure
:同时指定无日期后缀的主日志文件,确保不遗漏该文件里的记录。
这样就能一次性从多个相关日志文件中,过滤出所有 SSH 成功登录的记录了。
你会发现 grep Accepted /tmp/secure-202303* /tmp/secure 的前面有过滤的信息
所以我发现可以用cut 命令过滤:
grep Accepted /tmp/secure-202303* /tmp/secure | cut -d: -f2-
过滤出来就是正常的
可以直接用了
若想用 cut
命令解决“不显示文件名”的问题,核心是利用 cut
的字段分割功能,剔除 grep
输出中“文件名:”的前缀部分。
命令实现:
grep "Accepted" /tmp/secure-202303* /tmp/secure | cut -d: -f2-
命令解释:
-
grep "Accepted" /tmp/secure-202303* /tmp/secure
:
从目标日志文件中筛选含Accepted
的行,输出格式为「文件名:日志内容」
(例如/tmp/secure:Mar 26 10:00:00 ... Accepted ...
)。 -
cut -d: -f2-
:-d:
:指定分隔符为冒号(因为grep
多文件输出的“文件名”和“内容”用冒号分隔)。-f2-
:提取从第2个字段开始到末尾的所有内容(第1个字段是“文件名”,后面的字段是实际日志内容)。
执行后,输出会直接显示日志内容,不再包含 /tmp/secure
等文件名前缀。
可以看看区别:
理解了逻辑成功可以直接写代码搞出来四个了
grep Accepted /tmp/secure-202303* /tmp/secure | cut -d: -f2- | awk '{print $11,$9,$1,$2,$3}'
注意printf函数后面是, 再前面加上斜杠n换行
最终结果成功的:
grep Accepted /tmp/secure-202303* /tmp/secure | cut -d: -f2- | awk '{printf "IP:%s 用户:%s %s %s %s\n", $11,$9,$1,$2,$3}'