Автоматизация однотипных операций при настройке коммутаторов через telnet без программирования

от автора

Вступление

Добрый день уважаемые хабражители!

Описанные ниже способ поможет сократить количество рутинной работы при настройке коммутаторов (например Planet, D-Link и др.) в случаях, когда необходимо выполнить несколько десятков — сотен однотипных операций вроде объявления виланов, добавления их на интерфейсы, экспорта конфигурационных файлов на tftp сервер. Безусловно решение далеко не оптимальное и рациональное, но, надеюсь, имеет право на жизнь.
Настройка производится через подключение по протоколу telnet. Увы, не смотря на то что современные свитчи поддерживают ssh и snmp, многие старые железки разумеют только telnet. Способ подойдет для среднего пользователя Windows, не программиста, т.к. используется всего лишь блокнот и пакетные bat файлы (просьба неровнодышащим к параолимпийским играм программистов дальше не читать).

Основной проблемой было найти программу, которая бы позволяла подключаясь к коммутатору по telnet автоматически проходить авторизацию, после чего передавать необходимые команды. Продолжительный поиск по проблеме давал результаты двух типов: код на делфи 15-летней давности и предложения осилить telnet клиент на питоне, что, каюсь, не входило в мои планы.
Чуть позже была найдена небезызвестная Kitty. Документации по программе что кот наплакал и основная часть находится на сайте и форуме без поиска. Подкупило наличие следующих функций: Kitty умеет запускать сохраненные сессии, где можно прописать логин и пароль для авторизации, строку с командами для авто выполнения, а так же путь к файлу со скриптом. Скрипт выполнятся после авторизации, его размер должен быть меньше 4096 байт или около 100 не длинных строк.

Подготовка

По умолчанию настройки Kitty хранятся в реестре, что не очень удобно. Создаем kitty.ini со следующим содержимым:

[KiTTY] savemode=dir initdelay=1.0 commanddelay=1.0 bcdelay=5 KittyPath=C:\Windows\System32\putty.exe 

Где savemode=dir заставляет Kitty хранить сессии в папке Sessions. Задержки в моем случае почти не отличаются от стандартных, их можно и подкрутить, главное, чтобы команды успевали отправляться и отрабатывать.
Копируем putty.exe, kitty.exe и kitty.ini в System32 и выполняем:

kitty.exe -convert-dir 

После этого настройки начинают подтягиваться из kitty.ini, а сессии сохраняются в C:\Windows\System32\Sessions.
Запускаем kitty.exe или kitty.exe -launcher

Создаем сессию

Перед созданием сессии рекомендую сохранить в сессии Default Settings оптимальные для себя настройки, в особенности выбрать кодировку UTF-8 в разделе Window — Translation.
Собственно сессия создается и сохраняется как обычно в Putty, только с большим количеством опций. В разделе Session выбираем telnet, прописываем host или ip адрес. В разделе Connection — Data прописываем логин и пароль для авторизации. Сделать это можно как в специальных полях, так и в строке Command или непосредственно в файле скрипта. Кому как нравится, я перепробовал все варианты. В данном примере опишу случай авторизации через строку Command. Синтаксис:

\n отправка символов \p задержка на одну секунду, можно повторять нужное количество раз \s05 пауза в секундах, если меньше 10, то пишется с нулем 

Все зависит от модели коммутатора и указанных в kitty.ini задержек, подбиралось опытным путем:

\s05LOGIN\n\pPASSWORD\n\p 

В строке Login script file указываем путь к файлу скрипта, например C:\scripts\script.txt
Возвращаемся в раздел Session, прописываем имя сессии, например testsession и сохраняем.

Пишем скрипт

В папке с файлом скрипта создаем обычный текстовый документ и сохраняем, например, как script.bat. Открываем его в любимом текстовом редакторе и пишем (и не забываем комментировать):

@echo off setlocal enableextensions enabledelayedexpansion chcp 1251 echo. echo Пример простого скрипта для добавления виланов на коммутаторе D-Link ::--------------------------------------------------- ::Генерирование скрипта на лету @echo null>>script.txt DEL script.txt ::--------------------------------------------------- FOR /L %%i IN (100,1,105) DO ( @echo # @echo create vlan %%i tag %%i )>>script.txt @echo #>>script.txt @echo logout>>script.txt ::--------------------------------------------------- ::Запуск скрипта start /wait kitty.exe -load "testsession" pause 

Первая часть скрипта позволяет выводить комментарии на русском языке. Правда для начала в свойствах командной строки нужно выставить шрифт Lucida Console. echo выводит комментарии при выполнении пакетного файла, :: двойное двоеточие — комментарии в коде (не употребляйте их в циклах).
Во второй части чистим существующий или не существующий файл, затем записываем в него скрипт. Все что угодно душе и поставленной задаче.
В третьей части запускаем Kitty с параметром -load «имя_сессии», где /wait определяет, что командный файл будет ждать пока завершится выполнение Kitty, а pause позволяет увидеть закончилось выполнение c ошибкой или всё в порядке.
Содержимое получившегося текстового файла:

# create vlan 100 tag 100 # create vlan 101 tag 101 # create vlan 102 tag 102 # create vlan 103 tag 103 # create vlan 104 tag 104 # create vlan 105 tag 105 # logout 

Как можно догадаться при выполнения скрипта Kitty ожидает строку оканчивающуюся на # (или любое другое окончание, пример ниже) и отправляет в ответ следующую строку и т.д.

::Сохранение конфигурации на коммутаторе Planet @echo #>>testscript2.txt @echo copy running-config startup-config>>testscript2.txt @echo :>>testscript2.txt @echo Y>>testscript2.txt @echo #>>testscript2.txt @echo exit>>testscript2.txt 

В скрипт можно перенести этап авторизации, а перед логаутом, например, добавить сохранение и экспорт конфигурационного файла.

Заключение

Таким образом можно формировать достаточно объемные скрипты и сравнительно быстро их выполнять. Недостатком, конечно же является то, что выполнять их придется частями, но таково ограничение Kitty. Наверняка есть множество других способов решения подобных задач — от загрузки готового конфига на коммутатор, до использования специализированного софта. Спасибо за внимание.

ссылка на оригинал статьи http://habrahabr.ru/post/180281/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *