我有一个脚本,我正在努力阻止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地址传递给脚本的其余部分。
感谢您的帮助!
答案 0 :(得分:1)
让我们开始摆脱命令行中所有无用的管道。将整个事情改为这一个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
答案 1 :(得分:0)
您可以将其转储回awk:
(grep sshd / var / log / messages | grep“AUTH_FAIL_PASSWD”| awk'{print $ 18}'| sort | uniq -c | awk'{if($ 1> 10)print $ 2}'| awk -F “=”'{print $ 2}')
这个最后一个awk用等号分隔字符串作为分隔符并打印第二个元素。
答案 2 :(得分:0)
你没有告诉,但如果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 | ...