Я работаю над сценарием для фильтрации записей сообщества из snmpd.conf
Сценарий:
SERVER=$(hostname)
touch /tmp/snmp_audit_$SERVER
echo $SERVER >> /tmp/snmp_audit_$SERVER
SNMP=$(cat /etc/snmp/snmpd.conf |grep -i rocommunity | awk '{print $1,$2,$3}'
echo $SNMP >> /tmp/snmp_audit_$SERVER
Что дает мне вывод в следующем формате:
rocommunity XXXX 1nn.nn.nnn.40
rocommunity XXXX 1nn.nn.nnn.0/24
rocommunity XXXX 1nn.nn.nnn.30
Однако я хочу отфильтровать только те серверы, которые не имеют ни одной из следующих записей в snmpd.conf:
rocommunity XXXX 127.10.30.40
rocommunity XXXX 192.10.30.0/24
rocommunity XXXX 192.20.100.30
И для всех тех, которые нет этих записей, позже мне нужно будет добавить эти диапазоны. Кроме того, мне нужно запустить его на нескольких серверах через ssh с сервера перехода, на котором у меня есть список имен серверов в файле. Пожалуйста посоветуй.
Вы можете сделать это с помощью grep
:
grep -vxFf exclude.txt /etc/snmp/snmpd.conf
Поместите следующие записи в exclude.txt
, в основном это ваш список исключений:
rocommunity XXXX 127.10.30.40
rocommunity XXXX 192.10.30.0/24
rocommunity XXXX 192.20.100.30
-f exclude.txt
считывает шаблон для сопоставления из файла exclude.txt
-F
выполняет сопоставление фиксированной строки вместо сопоставления с образцом регулярного выражения
-x
сопоставляет целые строки
-v
инвертирует операцию, т.е. будут показаны только несовпадающие строки