コミュニティエントリをフィルタリングするスクリプトを作成しています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を介して複数のサーバーで実行する必要があり、ファイルにサーバー名のリストが含まれています。アドバイスしてください。
答え1
次の方法でこれを実行できます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
仕事を逆にします。つまり、一致しない行のみを表示します。