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

в 16:59, , рубрики: 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:WindowsSystem32putty.exe

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

kitty.exe -convert-dir

После этого настройки начинают подтягиваться из kitty.ini, а сессии сохраняются в C:WindowsSystem32Sessions.
Запускаем 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 задержек, подбиралось опытным путем:

s05LOGINnpPASSWORDnp

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

Автор: djvnsk

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js