Сохранение конфигурации с оборудования Cisco (SNMP)
The answer you entered to the math problem is incorrect.
По роду работы, у многих администратор и инженеров часто встает
проблема регулярного сохранения конфигурационных файлов с большого
количества оборудования Cisco Systems. Эта статья освещает вариант
автоматизации этого процесса с использованием технологии SNMP.
Регулярное сохранение конфигураций оборудования можно делать как
минимум 2мя способами. Первый - это коннектиться телнетом или по ssh,
неважно, и потом делать copy run tftp. Это можно оформить в виде
скрипта. У этого способа 2 недостатка, во первых, передача в открытом
виде пароля по сети, и, во вторых, это долгий процесс по времени если
сравнивать со вторым способом. Второй способ это сохранять посредством .
Вкратце Simple Network Management Protocol - это технология, призванная
обеспечить управление и контроль за устройствами и приложениями в сети
связи путём обмена управляющей информацией между агентами,
располагающимися на сетевых устройствах, и менеджерами, расположенными
на станциях управления.
Инструментарий для работы с SNMP это пакет
в частности 2 команды из этого пакета это snmpwalk и snmpset. Первая
позволяет просмотреть какие MIB поддерживает устройство, а вторая
позволяет собственно управлять устройством. Также для сохранения
конфигов нужен tftp сервер, есть возможность сохранять на ftp но,
по-моему, проще на tftp. Платформу на которой всё это городить можно
выбрать разную Windows, Linux...и т.д. Я использовал Linux ибо проще
всё это прикручивать.
Собственно вот сами MIB которые и позволяют делать эти шаманские
действия. Оговорюсь что у цисок в частности свитчей существует IOS
(Internetwork Operation System) и COS (Catalyst Operation System)
это для записи конфига на tftp IOS аналог в консоли copy running-config tftp вот с детальным описанием
$tftpserver = '192.168.1.1';
$MIB = '.1.3.6.1.4.1.9.2.1.55';
$RW = 'secret';
# файл host-ios должен быть в формате
# cisco-one::192.168.1.2
# cisco-two::192.168.1.3 и т.д.
$filename_host = '/root/script/host-ios';
#Опрашиваем все циски по SNMP из файла host
open DATA, $filename_host or die "Невозможно открыть $filename_host: $!";
while (<DATA>)
{
chomp;
# теперь в $_ есть строка и мы ее разделяем на переменные
($name, $ip) = split(/::/);
system ("snmpset -v 2c -O qv -t 5 -c $RW $ip $MIB.$tftpserver s $name");
}
close DATA;
system ("mkdir $BACKUP_DIRS/`date +%m.%Y` -p");
system ("tar cvzf $BACKUP_DIRS/`date +%m.%Y`/configs-`date
+%b.%d.%Y`.tar.gz $BACKUP_SOURCE_DIR >> /dev/null && rm
-f $BACKUP_SOURCE_DIR/*");
Собственно вот минимальный конфиг для сохранения на цисках у которых стоит ОС СOS:
#!/usr/bin/perl
use English;
$tftpserver = '192.168.1.1';
$RW = 'secret';
# файл host-cos должен быть в формате
# cisco-one::192.168.1.2
# cisco-two::192.168.1.3 и т.д.
$filename = '/root/script/host-cos';
open DATA, $filename or die "Невозможно открыть $filename: $!";
while (<DATA>)
{
chomp;
# теперь в $_ есть строка и мы ее разделяем на переменные
($name, $ip) = split(/::/);
# устанавливаем на циске IP tftp сервера
system ("snmpset -v 2c -O qv -t 5 -c $RW $ip .1.3.6.1.4.1.9.5.1.5.1.0 s 172.25.15.8");
# устанавливаем имя под которым будет сохраняться конфиг
system ("snmpset -v 2c -O qv -t 5 -c $RW $ip .1.3.6.1.4.1.9.5.1.5.2.0 s $name");
# ну а тут говорим циске сгрузить конфиг на tftp
system ("snmpset -v 2c -O qv -t 5 -c $RW $ip .1.3.6.1.4.1.9.5.1.5.4.0 i 3 ");
}
close DATA;
для сохранения конфигов с PIX я знаю только один вариант в виду того,
что они не поддерживают типы сообщений SNMP Set. Остается только первый
вариант это сохранение посредством телнета, вот сам скрипт:
#!/usr/bin/perl
use English;
# файл host-pix должен быть в формате
# cisco-one::192.168.1.2
# cisco-two::192.168.1.3 и т.д.
$filename = '/root/script/host-pix';
$DIR="/root/script/";
# пользователь в моём случае аутентификация через tacasc+
$USER="user";
$PASS_USER="passuser";
# пароль на ENABLE
$PASS_ENABLE="passenable";
system("rm -f ./temp.sh");
open DATA, $filename or die "Невозможно открыть $filename: $!";
while (<DATA>)
{
chomp;
# теперь в $_ есть строка и мы ее разделяем на переменные
($name, $ip) = split(/::/);
system("cd $DIR");
system("echo '#!/usr/bin/expect -f' >> temp.sh");
system("echo spawn telnet $ip >> temp.sh");
system("echo expect 'Username: ' >> temp.sh");
system("echo send \"$USER\\r\" >> temp.sh");
system("echo expect 'Password: ' >> temp.sh");
system("echo send \"$PASS_USER\\r\" >> temp.sh");
system("echo sleep 3 >> temp.sh");
system("echo send \"enable\\r\" >> temp.sh");
system("echo expect 'Password: ' >> temp.sh");
system("echo send \"$PASS_ENABLE\\r\" >> temp.sh");
system("echo sleep 10 >> temp.sh");
system("echo send '\"write net 172.25.15.8:config-$name\\r\"' >> temp.sh");
system("echo sleep 15 >> temp.sh");
system("echo send \"exit\\r\" >> temp.sh");
system("chmod 755 ./temp.sh");
system("./temp.sh");
system("rm -f ./temp.sh");
}
close DATA;
Комментарии
Отправить комментарий