Автоматический сбор конфигов с Cisco по SNMP
Когда Вы работаете с оборудованием Cisco (в моем случае коммутаторы catalist 3500 серии), и часто меняете настройки – есть необходимость в периодическом сохранении конфигов на стороннем сервере для возможности “отката” настроек или т.п. Но если у Вас не один, и не два таких коммутатора, а скажем, сотня или две сотни? Да, руками “сливать” конфиги будет очень нудно и долго. Поэтому сейчас распишу вариант как можно за десяток секунд получить конфиги со всех управляемых свичей сразу, с помощью скрипта на BASH.
1. И так, в первую очередь нам понадобится сервер TFTP. Я поднимал на Mikrotik. Полную настройку роутера я опущу, оставлю только как непосредственно включить tftp
/ip tftp add ip-addresses=10.20.30.60 read-only=no real-filename=/disk1/
2. Линуксовый сервер, с установленными пакетами SNMP, на котором будет запущен скрипт
net-snmp.i686 1:5.7.2-23.fc21 net-snmp-agent-libs.i686 1:5.7.2-23.fc21 net-snmp-utils.i686 1:5.7.2-23.fc21
3. Разрешить на Cisco как минимум режим записи по snmp, указав уникальный пароль (community)
snmp-server community blablabla RW
Проверить можно, запустив команду опроса коммутатора по snmp:
[disnetern@monitoring]# snmpwalk -v 2c -c blablabla 10.20.31.2
4. Ниже приведен последовательный список команд snmp для выполнения скрипта
snmpset -c [snmp-community-string] -v 2c [ip-device] 1.3.6.1.4.1.9.9.96.1.1.1.1.2.[Random number] i 1 snmpset -c [snmp-community-string] -v 2c [ip-device] 1.3.6.1.4.1.9.9.96.1.1.1.1.3.[Random number] i 4 snmpset -c [snmp-community-string] -v 2c [ip-device] 1.3.6.1.4.1.9.9.96.1.1.1.1.4.[Random number] i 1 snmpset -c [snmp-community-string] -v 2c [ip-device] 1.3.6.1.4.1.9.9.96.1.1.1.1.5.[Random number] a [ip-tftp-server] snmpset -c [snmp-community-string] -v 2c [ip-device] 1.3.6.1.4.1.9.9.96.1.1.1.1.6.[Random number] s [file-name] snmpset -c [snmp-community-string] -v 2c [ip-device] 1.3.6.1.4.1.9.9.96.1.1.1.1.14.[Random number] i 1
где:
- snmp-community-string – пароль на RW в циске.
- ip-device – ip-адрес коммутатора.
- ip-tftp-server – ip нашего tftp сервера
- file-name – имя файла конфигурации
Рассмотрим каждую строчку по отдельности:
1.3.6.1.4.1.9.9.96.1.1.1.1.2.432 i 1
ccCopyProtocol: Протокол передачи файлов, который должен быть использован, чтобы скопировать файл конфигурации по сети. (в данном случае выбран TFTP):
- tftp
- ftp
- rcp
- scp
- sftp
1.3.6.1.4.1.9.9.96.1.1.1.1.3.432 i 4
ccCopySourceFileType: Определяет тип файла для копирования:
- networkFile
- iosFile
- startupConfig
- runningConfig
- terminal
- fabricStartupConfig
1.3.6.1.4.1.9.9.96.1.1.1.1.4.432 i 1
ccCopyDestFileType: Указывает тип файла для копирования:
- networkFile
- iosFile
- startupConfig
- runningConfig
- terminal
- fabricStartupConfig
1.3.6.1.4.1.9.9.96.1.1.1.1.5.432 a 10.20.30.60
ccCopyServerAddress: IP-адрес сервера TFTP, чтобы скопировать файл конфигурации. В этом случае сервер TFTP является 10.20.30.60
snmpset -c c1sc0zine -v 2c 192.168.1.1 1.3.6.1.4.1.9.9.96.1.1.1.1.6.432 s cisco_data.cfg
ccCopyFileName: Имя файла (включая путь, если это применимо) файла.
1.3.6.1.4.1.9.9.96.1.1.1.1.14.432 i 1
ccCopyEntryRowStatus: Статус записи таблицы. После того, как статус входа устанавливается активный (1) , связанная с ним запись не может быть изменена, пока запрос не завершится (ccCopyState переходит в состояние «успешный» или «неудавшийся»). Объект может быть:
- active
- notInService
- notReady
- createAndGo
- createAndWait
- destroy
5. Создадим список ip-адресов со всеми нашими коммутаторами, где каждый новый ip укажем с новой строки, например:
10.20.31.2 10.20.31.3 10.20.31.4 ... 10.20.31.n
6. Создадим файл со скриптом .sh
#!/bin/bash
CDATE=`date "+_%Y-%m-%d"`
TFTP="10.20.30.40"
CMNT="blablabla"
IPLIST="/home/disnetern/cisco_list.txt"
LOG="/var/log/config_collector.log"
while read IP
do
/bin/snmpset -c $CMNT -v 2c $IP 1.3.6.1.4.1.9.9.96.1.1.1.1.2.432 i 1 || continue
/bin/snmpset -c $CMNT -v 2c $IP 1.3.6.1.4.1.9.9.96.1.1.1.1.3.432 i 4
/bin/snmpset -c $CMNT -v 2c $IP 1.3.6.1.4.1.9.9.96.1.1.1.1.4.432 i 1
/bin/snmpset -c $CMNT -v 2c $IP 1.3.6.1.4.1.9.9.96.1.1.1.1.5.432 a $TFTP
/bin/snmpset -c $CMNT -v 2c $IP 1.3.6.1.4.1.9.9.96.1.1.1.1.6.432 s $IP$CDATE.cfg
/bin/snmpset -c $CMNT -v 2c $IP 1.3.6.1.4.1.9.9.96.1.1.1.1.14.432 i 1 && echo "Config from $IP was uploaded on tftp in $CDATE" >> $LOG
done <"$IPLIST"
exit 0
Где:
7. После закидываем в cron задачу, по запуску этого скрипта, скажем по воскресеньям? 5 утра:
0 5 * * 0 /home/disnetern/conf_collect_cisco.sh 2>&1




Comments
So empty here ... leave a comment!