我正在编写一个脚本来阻止SFTP服务器上失败登录的IP地址。我还使用Centrify将服务器连接到AD,并且我注意到Centrify记录用户访问的方式与正常情况不同。我可以通过以下一条消息提取失败登录的IP地址:
(grep sshd /var/log/messages | grep "AUTH_FAIL_PASSWD" | awk '{print $18}' | sort | uniq -c | awk '{ if ( $1 > 10) print $2 }')有了Centrify,这提供了以下的输出:
client=0.0.0.0我需要做的是删除"client=“,这样我就可以将IP地址传递给脚本的其余部分。
谢谢你的帮助!
发布于 2014-10-23 19:06:32
让我们开始处理命令行中所有无用的管道。将整个操作更改为这个awk命令:
awk '/sshd/&&/AUTH_FAIL_PASSWD/{cnt[$18]++} END{for (ip in cnt) if (cnt[ip] > 10) print ip}' /var/log/messages现在-更新您的问题,包括一些示例输入(/var/log/messages的内容)和预期的输出,并根据这些文件中的文本告诉我们您想要做什么。
哦,我想我明白了。这可能是你想要的:
awk '/sshd/&&/AUTH_FAIL_PASSWD/{sub(/.*=/,"",$18); cnt[$18]++} END{for (ip in cnt) if (cnt[ip] > 10) print ip}' /var/log/messages发布于 2014-10-23 19:03:26
你可以把它倒回给awk:
(grep sshd /var/log/messages \ grep "AUTH_FAIL_PASSWD“x awk '{print $18}‘x排序uniq -c awk '{ if ( $1 > 10)打印$2 }’溶胶- awk -F"=”{ print $2 }“)
最后一个awk将字符串拆分为等号作为分隔符,并打印第二个元素。
发布于 2014-10-23 19:09:04
你没说,但如果ip是$18
... | awk '{if(split($18,a,/=/)==2) print a[2]; else print a[1] }' | ...做你想做的事
更简单
... | awk '{sub(/.*=/,"",$18); print $18}' | ...此外,我喜欢管道,在很多情况下,它们清楚地显示了你的意图,但也许至少有一部分是值得接受的。
awk '/sshd/&&/AUTH_FAIL_PASSWD/ {
sub(/.*-/,"",$18; print $18}' /var/log/messages | sort | ...https://stackoverflow.com/questions/26535419
复制相似问题