Встретил сегодня в статистике любопытный запрос: cisco+ssh+sertificate+putty
Напомнил мне он о том, как мы воевали Cisco и как все это привело к более менее нормальной схеме резервирования настроек наших многочисленных маршрутизаторов Cisco.
Ситуация была презабавная, необходимо было срочно подключить один новый сегмент сети для точек wi-fi, создали пару vlan, пару DHCP пулов. Настроили проверили что все работает и забыли. Но где-то через недельку на ночь вырубили свет в малой серверной. Бесперебойники подержали сколько могли и к утру отключились. Утром, после того как свет включился и все поднялось, на какую-то встречу приехали большие дяди, у каждого ноутбук и они не могут подключится в сети. Через несколько минут обнаружилось что наши изменения конфигурации, каким-то таинственным образом, частично исчезли. Т.е. Vlan остался только один, а пулы вообще местами поменялись. Конечно, подумали, что мы такие-сякие, банально забыли сохранить конфигурацию. Бывает… Дальше началось самое интересное:
По памяти восстановили все, не без напряга конечно, сохранили конфигурацию и успокоились. На следующую ночь тоже самое, нет света, с утра не работают wi-fi клиенты. Но мы же сохраняли настройки! Проверили опять тоже самое. Оказалось что мы зачем то решили descripton для vlan назначить в красивом виде, типа «Vlan for tochki dostupa — klienti». Проблема была как раз в красивости. В кавычки взяли что бы были пробелы и именно из-за них и началась эта катавасия. Сделали как и раньше делали: Vlan_for_tochki_dostupa_klienti. Получилось как в том анекдоте -Настоящие_программисты_пробелами_не_пользуются.
После всех этих вещей, мы всерьез задались вопросом: Как же нам, постоянно бекапить конфиги Csico, что бы в случае чего иметь их под рукой. В Интернете как обычно много таких вопросов и много платных и бесплатных приложений. Бесплатные обычно имеют ограничения или совсем не имеют средств интерактивности, а платные никто для такой «мелочи» не купит.
Оговорюсь что в тот момент, а это было давно, все Cisco во внутренней сети управлялись дефолтным методом, через telnet. Хоть и не безопасно, но работало долгое время. Вот как раз для такой схемы я и нашел прекрасную утилиту.
Cisconfig (280,0 KiB, 2 709 hits)
Работает она из консоли и в качестве параметров принимает учетные данные для входа на cisco и ее IP. В результате своей работы создается файлик именем вида hostnamecisco.txt, в котором будет лежать вывод команды sh run.
Все что остается набросать небольшой bat файл примерно с таким содержимым
ciconfig.exe -UN:cisco -UP:cisco -ip:192.168.0.254
set vdate=%DATE%
mkdir «config_%vdate%»
move *.txt «config_%vdate%»
и сделать из этого bat файла задачу выполняющуюся каждую ночь в 1 час ночи. При выполнении батника будет создаваться папка с названием содержащим дату бекапа а внутри будет находится сам конфиг.
Примерно полгода мы пользовались таким бекапером конфигурации, а затем пришло время отказываться от telnet и переходить на SSH.
Для того что бы Cisco работала через SSH ей необходимо иметь поддержку такой возможности. Это можно определить по имени загрузочного образа IOS, в нем должен быть кусочек «k9».
Если такой есть хорошо, если нет, ищем прошивку с таким суффиксом.
Для того что бы заработал SSH необходимо на cisco произвести следующие настройки
1. Определить domain name и hostname
hostname testname
ip domain-name primer.local
2. Сгенерировать SSH ключ.
cry key generate rsa
3. Настроить таймаут и количество повторов авторизации.
ip ssh time-out 60
ip ssh authentication-retries 2
4. Настроить версию SSH
ip ssh version 2
5. Включить возможность безопасной передачи файлов (необходимо только для бекапа)
ip scp server enable
6. Отключить telnet доступ (только после того как все нормально настроено)
line vty 0 4
transport input ssh
После этих манипуляций вы сможете подключится к cisco через SSH используя putty или любой другой ssh клиент.
После того как мы перевели все cisco на SSH я вспомнил о нашем бекапере конфигов. Т.к. telnet больше не использовался, необходимо было переделать для использования ssh.
В пункте 5 я упомянул команду включающую режим SCP (безопасный протокол передачи файлов). Если этот режим включен, то на cisco можно зайти через Winscp или любой другой клиент и увидеть ее файловую систему. Т.к. нам необходима интерактивная утилита? я воспользовался программкой pscp.exe из пакета Putty.
Измененный bat файл стал выглядеть примерно так:
pscp -pw cisco -scp cisco@192.168.0.254:running-config c1700_test.txt
set vdate=%DATE%
mkdir «config_%vdate%»
move *.txt «config_%vdate%»
Работает он аналогичным образом: ночью запускается по расписанию и копирует running-config в файл с раcширением txt, который в свою очередь затем складывается в папочки по дням. Тут есть один нюанс, при запуске батника в первый раз, необходимо будет принять открытый ключ для того что бы осуществить подключение к ssh. При запуске батника будет выводится соответствующий запрос и выбор y/n . После первого раза уже подобного запроса происходить не будет и батник будет работать полностью интерактивно.
Такая схема показала себя с лучшей стороны: обеспечивается безопасный протокол передачи, есть ежедневная каталогизированная конфигурация всех cisco, полностью бесплатная. За исключением только вопроса лицензирования IOS с поддержкой k9, но это довольно сложный вопрос и касаться его не будем. Впрочем и пока еще не проблема найти нужную IOS в интернете.
еще один вариант бекапа если у вас в качестве ОС клиентской стороны используется LINUX
Ещё один вариант под никсы, для меня лично он кажется более простым и удобным, может ещё кому понравится.
1.2.3.4 — сервак где бэкапится
1.2.3.254 — кошкаno ip rcmd domain-lookup
ip rcmd rsh-enable
ip rcmd remote-host root 1.2.3.4 root enableИ в крон нечто типа того, чтоб каждые 6 часов бэкапить конфиги с циски и удалять бэкапы конфигов старше 90 дней:
0 */6 * * * /usr/bin/rsh 1.2.3.254 sh run > /mnt/backup/cisco/c1841_`date +’%d-%m-%Y_%H-%M’`
0 */6 * * * find /mnt/backup/cisco/ -type f -mtime +90 -print -exec rm -f {} \;
За этот совет большое спасибо Holocaust
13 комментариев
> После первого раза уже подобного запроса происходить не будет и батник будет работать полностью интерактивно.
Может, всё-таки, автономно??? Потому как «полностью интерактивно» — получается, каждый раз он все параметры перезапрашивает…
Wikipedia
Исходя из общего определения интерактивности как возможности обмена элементами информации и порождении адекватных действий на эту информацию
любая программа способная принять информацию без участия человека и произвести действия по обработке информации, будет интерактивной. Тут как раз так программа принимает ключи запуска от батника и работает сама по себе. Если бы человек управлял то это уже программа с ручным вводом и управлением.
По крайней мере нас так учили на теории обработки информации.. может что то с тех пор изменилось, но наврядли.
обратите внимание, что в определении в Вашей цитате написано: «Интерактивность — это способность … реагировать на действия пользователя». То есть если система реагирует на действия пользователя, она интерактивна.
В конкретном случае интерактивны по отношению к пользователю планировщик задач и ssh при первом запуске, далее всё происходит автоматически.
Либо, если рассматривать интерактивность не по отношению к пользователю, а между системами, то оба запуска одинаково интерактивны, причём пакетный файл одинаково неинтерактивен, поскольку его действия не зависят ни от выдаваемых cisco’й ответов, ни от действий пользователя.
И, всё-таки, «активно и разнообразно реагировать на действия пользователя»!!! А в Вашем случае какая уж тут «реакция на действия пользователя» после первого прогона батника?
Ещё один вариант под никсы, для меня лично он кажется более простым и удобным, может ещё кому понравится.
1.2.3.4 — сервак где бэкапится
1.2.3.254 — кошка
no ip rcmd domain-lookup
ip rcmd rsh-enable
ip rcmd remote-host root 1.2.3.4 root enable
Сорри, чё-то коммент зарезает, сюда выложил http://codepaste.ru/3189/
Спасибо огромное за совет, я как то совсем выпустил из виду поддержку unix платформ. Все от того что у нас linux это несерьезная ОС стоит только на стендовых тачках. На боевых только соляра и то туда лучше не лезть. А машинок с windows куча вот под них и делал.
а имеется возможность заиметь исходник Cisconfig ?
ибо треба не только Sh run хватать, но и Vty и Vlan…
буду весьма благодарен.
програмка не моя, авторы где то на сайте microsin.ru
Вообще под такие условия иногда проще самому скриптик написать, под линуксом на том же awk или или под win с использованием любого самописного ПО для работы с сокетами, или каких либо компонент для работы с телнетом. готового решения у меня нету.
Я так понимаю у вас другие циски через aux зацеплены? если так то стоит копать в сторону пакетного запуска telnet клиента с сохранением вывода в файл
Cisco, кстати, сама умеет сохранять конфиг на сервере, например, tftp. Пример еженедельного слива конфига по времени на tftp сервер:
cisco(config)#kron policy-list Backup
cisco(config-kron-policy)#cli show run | redirect tftp://172.16.1.10/ciscobackup.cfg
cisco(config)#kron occurrence Backup at 23:00 Sun recurring
cisco(config-kron-policy)#policy-list Backup
!вот за это спасибо не знал, вполне дельный способ, правда надо иметь постоянно поднятый тфтп и скрипт чтобы все по папкам раскладывал но решение стоящее.
Зачем по папкам, пускай все конфиги в одной папке лежат. Можно же настроить так чтобы, например, конфиг с коммутатора сохранялся в папке с названием switch.cfg, а конфиг с маршрутизатора router.cfg ну и т.д. в этом же духе.
можно и так, но конкретно у нас аудит SOX требует что бы была история всех изменений конфигурации за 75 лет 🙂 как то сложно без скрипта разнесения это условия выполнить:0