如何从/var/log/auth.log中提取SSH成功登录IP并按指定格式输出
如何从/var/log/auth.log中提取SSH成功登录IP并按指定格式输出
嘿,我来帮你搞定这个需求!结合你提到的公钥登录场景,我们可以用grep+awk的组合快速从/var/log/auth.log里提取符合要求的记录,直接输出到指定文件,完美适配你的定时任务需求。
直接可用的命令
先给你能直接跑的命令,执行后就会把符合格式的记录追加到目标文件里:
grep "Accepted publickey for" /var/log/auth.log | awk '{printf "Accepted from %s from %s port %s at %s %s %s\n", $5, $11, $13, $1, $2, $3}' >> ssh_approved_logs.txt
命令拆解(方便你按需调整)
grep "Accepted publickey for":精准筛选出公钥登录成功的记录,刚好匹配你只统计合法公钥登录的需求,避免包含密码登录或失败尝试的日志awk部分负责格式转换:$5:对应日志里的用户名(比如日志行里的Accepted publickey for johndoe,第5个字段就是johndoe)$11:登录来源的IP地址$13:登录使用的端口号$1 $2 $3:分别是日志的日期、月份、时间,组合起来就是你要的登录时间戳
如果你的系统日志字段顺序略有不同(比如某些发行版的auth.log格式小差异),可以先跑grep "Accepted publickey for" /var/log/auth.log | head -1看一下具体的日志行结构,再调整awk里的字段序号就行。
配置成定时任务(Cron)
要把这个操作做成定时任务,直接编辑crontab:
crontab -e
然后添加一行定时规则,比如每天凌晨1点执行并追加记录(记得替换成你实际的文件路径):
0 1 * * * grep "Accepted publickey for" /var/log/auth.log | awk '{printf "Accepted from %s from %s port %s at %s %s %s\n", $5, $11, $13, $1, $2, $3}' >> /home/your-user/ssh_approved_logs.txt
如果不想重复记录历史日志,可以把>>改成>(每次覆盖文件),或者结合tail只处理最近的日志片段,比如tail -n 2000 /var/log/auth.log来提升效率,避免每次扫描整个大日志文件。
备注:内容来源于stack exchange,提问作者Datadimension
相关产品推荐
相关产品推荐

