Автоматизация однотипных операций при настройке коммутаторов через 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. Наверняка есть множество других способов решения подобных задач — от загрузки готового конфига на коммутатор, до использования специализированного софта. Спасибо за внимание.

P.S.


Так же удобно выполнять команды следующего рода (благо их можно быстренько штамповать как скриптом, так и банально в Excel):
start kitty -telnet LOGIN@192.168.0.100 -pass PASSWORD -cmd "<Например какие-нибудь команды>\n\psave\n\plogout"
start kitty -ssh root@192.168.0.1 -pass PASSWORD -cmd "reboot"


P.P.S.


Пример скрипта с expect:
#!/usr/bin/expect -f
set timeout -1
spawn ssh -o PubkeyAuthentication=no LOGIN@IPADDRESS
expect -exact "password: "
sleep 1
send -- "PASSWORD\r"
expect -exact "admin#"
sleep 1
send -- "COMMAND\r"
expect -exact "admin#"
sleep 1
send -- "logout\r"
expect {\$\s*} { interact }

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 12

    +3
    /usr/bin/expect
    man expect
      0
      спасибо за наводку! буду курить.
      0
      Можно плюсануть только за параолимпийские игры по программированию)
        +4
        Мне стыдно об этом говорить, но cmd.exe является Тьюринг-полным языком, а значит, написание на нём чего-либо уже является программированием.
          0
          Под WIndows использовал 2 приема:
          первый — софтинка, называющая Telnet Script Executor (использует файлы сценариев, имеет открытый и понятный исходный код), второй — посылка нажатий клавиш через VBScript. Но все-таки думаю, что вариант с tftp, Rancid и, возможно, какой-то системой управления сетью оптимальней.
            0
            Как-то слепил на коленке пакет, настраивающий набор модемов ADSL под настройки провайдера. Интерфейс — HTA, обработка конфигов — VBScript, настройка через telnet — TSE, настройка PPPoE — самописная утилита (как создать в Windows из консоли PPPoE подключение не нашел), все это добро запускалось при входе в систему до загрузки интерфейса пользователя. Как ни странно, весь этот зоопарк работал, но я себе пообещал никогда так больше не делать — уж слишком некрасивое решение.
            0
            1. подключаюсь к новому коммутатору через тот же putty.
            2. открываю файл с шаблоном конфига.
            3. CTRL+A, CTRL+C
            4. Возвращаюсь в putty.
            5. CTRL+V
            6. save (save all)
            Profit…
            Вся настройка занимает 3-5 минут с учетом правок под конкретные vlan.
              0
              Пройдет через вас пара сотен коммутаторов, вы придете к тому же что и автор статьи.
                0
                Через меня прошла не одна сотня коммутаторов.
                но как написали ниже, они все коммутаторы уровня доступа.
                Агрегационных коммутаторов всего то штук 50. все настроены ручками.
                0
                Для коммутаторов уровня доступа почти так и делаю, точнее заливаю «дефолтный конфиг» со всеми настройками, меняю ip и логин/пароль, готово.
                А способ описанный в статье использую для уровня агрегации, когда нужно много всего добавить/переделать на горячую.
                0
                Если linux, то обычный bash вам в помощь.

                for i in {100..105};do echo «create vlan $i tag $i»;done | nc switch.local 23
                  0
                  Через nc это плохой способ, нет ожидания готовности и контроля, того что получил свитч и проблема логирования.

                Only users with full accounts can post comments. Log in, please.