Как стать автором
Обновить

Использование python библиотеки Exscript для работы с оборудованием Cisco и Huawei по SSH

Время на прочтение 2 мин
Количество просмотров 17K
В работе Python приложения встала задача получать данные с сетевого оборудования и проводить его настройки удалённо, по SSH. Можно воспользоваться Paramiko, а можно не выдумывать велосипед и использовать основанную на нём библиотеку Exscript. Под катом — примеры кода для подключения и получения информации из команд. Ввиду отсутствия документации к Exscript этот материал может кому-нибудь здорово пригодиться.



Для начала импортируем библиотеку (если нет в системе — скачать можно на гите)

from Exscript import  Account
from Exscript.protocols import SSH2


Для Cisco, например, попингуем Гугл, но ничто не мешает использовать команды для конфигурирования:

acc = Account('USERNAMESSHAAA', 'PASS')
con = SSH2()
con.connect('ROUTER_IP')
con.login(acc)
con.execute('terminal length 0')
con.execute('ping vrf INTERNET  8.8.8.8')
con.send('exit')
output = con.response


В Output будет:
ping vrf INTERNET 8.8.8.8

Wed May 11 19:13:25.551 FET
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds:
!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/20/21 ms
RP/2/RSP2/CPU1:Msk-1-sr9000#


Именно на Huawei возникла задача, с которой долго боролся — нежелание Exscript ждать выполнения операции, требующей времени и отправки подтверждения. Например, при диагностике пар в линии нужно было подтвердить прерывание сервиса for a while нажатием на y и подтверждением по Enter, а потом подождать пару секунд, пока завершится тест. На этом Exscript вешался, методом проб и ошибок вывел решение.

Пример работы в консоли при ручном подключении к коммутатору для выполнения данной задачи:

sys
Enter system view, return user view with Ctrl+Z.
[SW]int g0/0/5
[SW-GigabitEthernet0/0/5]v
Warning: The command will stop service for a while, continue?[Y/N]:y
Pair A length: 56meter(s)
Pair B length: 56meter(s)
Pair C length: 56meter(s)
Pair D length: 56meter(s)
Pair A state: Open
Pair B state: Open
Pair C state: Open
Pair D state: Open
[SW-GigabitEthernet0/0/5]

А вот так можно сделать в Exscript, ограничивая случайный тест на аплинках через вычет в Description триггера запрета To_Smth_Important_Device:

acc = Account('USERNAMESSHAAA', 'PASS')  
con = SSH2()
con.connect('ROUTER_IP')     
con.login(acc)  
con.execute('screen-length 0 temporary')           
con.execute('sys')
con.execute('interface GigabitEthernet0/0/2')
con.execute('disp th')
upck = ''
upck = con.response
 if 'To' not in upck:
  con.set_prompt(r'Y')
  con.execute('vi')
  con.set_prompt('Pair D state.{0,20}')
  con.execute('Y')
  output = con.response
 else:
  output = 'UPLINK DETECTED! TEST ON UPLINKS RESTRICTED!'
con.send('quit\r')
con.send('quit\r')
con.send('quit\r')


В Output:

/N]:Y
Info: This operation may take a few seconds. Please wait for a moment........done.
Pair A length: 56meter(s)
Pair B length: 56meter(s)
Pair C length: 56meter(s)
Pair D length: 56meter(s)
Pair A state: Open
Pair B state: Open
Pair C state: Open
Pair D state: Open


Парсить вывод можно на своё усмотрение.

Спасибо за внимание!
Теги:
Хабы:
+11
Комментарии 9
Комментарии Комментарии 9

Публикации

Истории

Работа

Python разработчик
136 вакансий
Data Scientist
66 вакансий

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн