Надоело выполнять рутинные операции с большим парком железа? Давайте разберем, как автоматизировать процесс подключения по протоколу telnet и ввода команд для удаленной настройки железа, используя скриптовый язык программирования bash.
bash (Bourne again shell, «Born again» shell — «возрождённый» shell) — Самая популярная командная оболочка UNIX/Linux.
Telnet bash script
Первым делом, давайте сформулируем задачу. Допустим, у нас есть три маршрутизатора cisco c ip адресами 192.168.10.10, 192.168.10.11 и 192.168.10.12 и компьютер с Linux. Нам требуется подключиться к каждому маршрутизатору через протокол telnet и узнать версию IOS, используя команду "show ver | include IOS". Можно, конечно, пройтись по этим маршрутизаторам, набирая команды вручную, но когда количество железок вырастет, например, до 100, согласитесь, проделать данную процедуру уже будет довольно утомительно. Поэтому сделаем скрипт, который соберет вывод команд со всех маршрутизаторов в файл.
#!/bin/bash set -x #Входные данные: USER="admin" PASSWD="123456" LOG="telnnet_conn.log" HOSTS=" 192.168.10.10 192.168.10.12 192.168.10.11 " for H in $HOSTS do echo START SCRIPT: >> $LOG date +%x-%R >> $LOG ( sleep 1; echo -en "$USER\r"; sleep 1; echo -en "$PASSWD\r"; sleep 1; echo -en "show ver | include IOS\r"; sleep 1; echo -en "exit\r"; sleep 1; ) | telnet $H >> $LOG echo =================================== >> $LOG done
Описание telnet скрипта
1. Начинаться любой bash-скрипт всегда должен со строки, указывающий путь к bash-интерпритатору.
#!/bin/bash
2. Включаем режим отладки, прописав set -x (позволяет наблюдать за ходом выполнения скрипта в терминале).
3. Задаем входные данные. В нашем случае это имя пользователя (USER), пароль (PASSWD), названия файла, в который будет собираться вывод команд (telnnet_conn.log), и ip адреса, к которым будем подключаться телнетом (HOSTS).
4. Для организации подключения сделаем цикл с перебором ip адресов.
for H in $HOSTS do #Тело цикла (выполняемые операции в цикле) done
5. Для удобства обработки вывода команд добавим строчку начала скрипта, используя echo и дату и время начала выполнения.
echo START SCRIPT: >> $LOG date +%x-%R >> $LOG
6. Теперь начинается основная часть работы скрипта. Укажем команды, которые мы хотели бы, чтобы скрипт вводил за нас, а именно ввод логина, пароля и команду вывода версии IOS. Команда "sleep 1" используется чтобы расставить паузы при выполнение команд.
( sleep 1; echo -en "$USER\r"; sleep 1; echo -en "$PASSWD\r"; sleep 1; echo -en "show ver | include IOS\r"; sleep 1; echo -en "exit\r"; sleep 1; ) | telnet $H >> $LOG
7. Для удобства чтения выведем разделитель (=========), используя echo.
Примечание:
Создать файл можно, используя команду touch имя_файла.
touch telnet_con.sh
Чтобы не мучиться с правами, можно дать максимум привилегий.
chmod 777 telnet_con.sh
Запускаем скрипт
./telnet_con.sh
Скрипт отработает и создаст файл с названием telnnet_conn.log, в котором и будет храниться вывод выполняемых на железяках команд.
Пример содержания файла telnet_conn.log
START SCRIPT: 05.11.2017-14:19 Trying 192.168.10.10... Connected to 192.168.10.10. Escape character is '^]'. User Access Verification Username: admin Password: R1>show ver | include IOS Cisco IOS Software, 7200 Software (C7200-ADVIPSERVICESK9-M), Version 15.2(4)S5, RELEASE SOFTWARE (fc1) R1>exit ============================== START SCRIPT: 05.11.2017-14:19 Trying 192.168.10.11... ...
На этом все. Нам удалось с помощью написанного скрипта на bash автоматизировать процесс подключения к маршрутизаторам по протоколу telnet, выполнить ввод команд на удаленных хостах и записать результат их выполнения в файл. Комментируем, подписываемся ну и всем пока:)
Компонент комментариев CComment