2014-10-23 2 views
0

У меня есть сценарий, над которым я работаю, чтобы заблокировать IP-адрес неудачного входа в систему на SFTP-сервере. Я также использую Centrify для подключения сервера к AD, и я заметил, что Centrify регистрирует пользователей по-разному, чем обычно. Я в состоянии подтянуть IP-адрес неудачных попыток входа в следующую один лайнер:Удалить символы с awk

(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 

Что мне нужно сделать удалить «клиент = «так что я могу передать только IP-адрес остальной части скрипта.

Спасибо за помощь!

+0

В любое время, когда вы соединяете это с помощью grep и awk, вы совершили ошибку. awk может сделать эту фильтрацию для вас. '/ sshd/&&/AUTH_FAIL_PASSWD/{print $ 18}' –

+0

Вы также можете выполнить де-дублирование в awk (по стоимости хранения записей в памяти) и без необходимости сортировки. –

+0

'{if ($ 1> 10) print $ 2}' можно переписать как '$ 1> 10 {print $ 2}'. –

ответ

1

Давайте начнем избавляться от всех бесполезных труб в вашей командной строке. Изменить все это просто команда один AWK:

awk '/sshd/&&/AUTH_FAIL_PASSWD/{cnt[$18]++} END{for (ip in cnt) if (cnt[ip] > 10) print ip}' /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 
+0

Спасибо! Вторая команда awk делает трюк. Общая цель скрипта - заблокировать IP-адрес неудачных попыток входа на сервер SFTP. Я заметил, что мой сервер забивается одной и той же группой IP-адресов. – user3140412

0

Вы можете просто сбросить это обратно в AWK:

(Grep SSHD/вар/Журнал/сообщения | Grep "AUTH_FAIL_PASSWD" | AWK '{печать $ 18}' | сортировки | уник -c | AWK «{если ($ 1> 10) print $ 2} '| awk -F "="' {print $ 2} ')

Этот последний awk разбивает строку на знак равенства как разделитель и печатает второй элемент.

0

Вы не сказали, но если ф является $18

... | awk '{if(split($18,a,/=/)==2) print a[2]; else print a[1] }' | ... 

должны делать то, что вы хотите

Даже простой

... | awk '{sub(/.*=/,"",$18); print $18}' | ... 

Кроме того, мне нравятся трубы, во многих случаях они четко показывают ваши намерения, но, возможно, стоит согласиться на занятиях t часть того, что другие ответы были предложены

awk '/sshd/&&/AUTH_FAIL_PASSWD/ { 
     sub(/.*-/,"",$18; print $18}' /var/log/messages | sort | ... 
+0

Да, извините, в/var/log/messages, Centrify выгружает IP-адрес в 18 долларов США. Но он сбрасывает его как «client = 0.0.0.0». Спасибо. – user3140412

Смежные вопросы