О деактивации форума Eltex

Уважаемые коллеги! В связи с потерей актуальности данного ресурса, нами было принято решение о частичной деактивации форума Eltex. Мы отключили функции регистрации и создания новых тем, а также возможность оставлять сообщения. Форум продолжит работу в "режиме чтения", так как за долгие годы работы здесь накопилось много полезной информации и ответов на часто встречающиеся вопросы.

Мы активно развиваем другие каналы коммуникаций, которые позволяют более оперативно и адресно консультировать наших клиентов. Если у вас возникли вопросы по работе оборудования, вы можете обратиться в техническую поддержку Eltex, воспользовавшись формой обращения на сайте компании или оставить заявку в системе Service Desk. По иным вопросам проконсультируют наши менеджеры коммерческого отдела: eltex@eltex-co.ru.

Работа со свитчами через paramiko из Python

MES, ESR
norguhtar
Сообщения: 19
Зарегистрирован: 30 янв 2017 01:54
Reputation: 0

Работа со свитчами через paramiko из Python

Сообщение norguhtar » 20 мар 2017 00:28

Ребят может вы проясните каким образом со свитчами работать из чего-то отличного чем обычный интерфейс CLI? Попытка использовать вот такой код приводит к подвисанию скрипта

Код: Выделить всё

#!/usr/bin/python

import paramiko

host = "swip"
user = "admin"
pwd = "admin"

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=host, username=user, password=pwd)
print "exec command\n"
stdin,stdout,stderr = client.exec_command('sh ver'')
print "executed command\n"
print stdout.read()
client.close()


Выводится

Код: Выделить всё

exec command
executed command

и все дальше висяк. Попытка сделать тоже самое при помощи Net::SSH2 в perl приводит к тому же. Проверка кода на linux и mikrotik никаких проблем не выявляет. Так каким образом и что нужно исправить чтобы это заработало? Меня сильно удручает то что в целом базовые вещи не работают.

Версии ПО на свитче

Код: Выделить всё

SW version    1.1.45[5bb753fb] ( date  30-May-2016 time  12:24:53 )
Boot version    0.0.0.3 ( date  23-Feb-2011 time  17:40:14 )
HW version    01.06


Код: Выделить всё

System Description:                       MES2124M AC 28-port 1G Managed Switch

Сама железяка.

Evgen_94
Сообщения: 239
Зарегистрирован: 16 дек 2016 09:15
Reputation: 0

Re: Работа со свитчами через paramiko из Python

Сообщение Evgen_94 » 20 мар 2017 14:30

Добрый день.
Попытка использовать вот такой код приводит к подвисанию скрипта

По какой-то причине скрипт не отправляет на коммутатор команду. Можете попробовать написать скрипт через exscript.

Код: Выделить всё

#!/usr/bin/env python
from Exscript import Account
from Exscript.protocols import SSH2

acc = Account('user','pass')

conn = SSH2()
conn.connect('192.168.10.12')
conn.login(acc)
conn.execute('sh ver')

print conn.response

conn.send('exit\r')
conn.close()
Евгений Киселев / Элтекс / Сервисный центр ШПД / https://eltex-co.ru/support/

norguhtar
Сообщения: 19
Зарегистрирован: 30 янв 2017 01:54
Reputation: 0

Re: Работа со свитчами через paramiko из Python

Сообщение norguhtar » 20 мар 2017 15:30

Evgen_94 писал(а):Добрый день.
Попытка использовать вот такой код приводит к подвисанию скрипта

По какой-то причине скрипт не отправляет на коммутатор команду. Можете попробовать написать скрипт через exscript.


А теперь вопрос почему Exscript работает а Paramiko на базе которого он написан нет? У меня есть мысль, что к свитчу не уходит управляющий код о завершении команды и ее запуске. Может быть уточните какая у вас эмуляция терминала используется и что нужно отправлять перевод строки (\n) или перевод коретки (\r) ?

Судя по исходникам Exscript и тому что вы дальше пишете \r подается.

Evgen_94
Сообщения: 239
Зарегистрирован: 16 дек 2016 09:15
Reputation: 0

Re: Работа со свитчами через paramiko из Python

Сообщение Evgen_94 » 20 мар 2017 18:12

Судя по исходникам Exscript и тому что вы дальше пишете \r подается.

Всё так.
А теперь вопрос почему Exscript работает а Paramiko на базе которого он написан нет?

Вопрос интересный.
Евгений Киселев / Элтекс / Сервисный центр ШПД / https://eltex-co.ru/support/

norguhtar
Сообщения: 19
Зарегистрирован: 30 янв 2017 01:54
Reputation: 0

Re: Работа со свитчами через paramiko из Python

Сообщение norguhtar » 20 мар 2017 23:46

Неа не работает вами предложенный модуль. Попробуйте к примеру получить вывод

Код: Выделить всё

    conn.execute('enable')
    print conn.response
    conn.execute('sh interfaces switchport gi 0/1')
    print conn.response


Т.е. включить привилегированный режим и затем получить данные по порту. Как вы думаете что получим? Правильно он не включится. Более того пишет

Код: Выделить всё

% Unrecognized command


Проще говоря у свитчей адово кривой CLI который не возможно автоматизировать.

Evgen_94
Сообщения: 239
Зарегистрирован: 16 дек 2016 09:15
Reputation: 0

Re: Работа со свитчами через paramiko из Python

Сообщение Evgen_94 » 21 мар 2017 09:14

Неа не работает вами предложенный модуль. Попробуйте к примеру получить вывод

Код: Выделить всё
conn.execute('enable')
print conn.response
conn.execute('sh interfaces switchport gi 0/1')
print conn.response


Т.е. включить привилегированный режим и затем получить данные по порту. Как вы думаете что получим? Правильно он не включится. Более того пишет

Код: Выделить всё
% Unrecognized command

Вы под каким пользователем пытаетесь зайти? С какой привилегией? Если у пользователя 15 привилегия, то вы уже заходите в привилегированном режиме. Попробуйте задать пароль на enable,и в скрипте укажите этот пароль

Код: Выделить всё

acc = Account('user','pass','enable')

Логика выполнения команды conn.execute такая: если при подключении к железке в консоле будет решетка на конце, то enable не будет использоваться, если на конце будет > , то по умолчанию будет использоваться команда enable. На месах на enable необходимо обязательно задать пароль.
Евгений Киселев / Элтекс / Сервисный центр ШПД / https://eltex-co.ru/support/

Голубцов Дмитрий
Сообщения: 85
Зарегистрирован: 16 окт 2014 12:50
Reputation: 0

Re: Работа со свитчами через paramiko из Python

Сообщение Голубцов Дмитрий » 21 мар 2017 10:30

norguhtar писал(а):Проще говоря у свитчей адово кривой CLI который не возможно автоматизировать.


Из каких соображений вы приняли решение о "кривости" CLI? Очень странно, когда человек пишет такие фразы только из-за того, что какой-то инструмент не заработал как надо с первого раза. Пробовали ли вы другие варианты автоматизации?
Голубцов Дмитрий / Eltex / Сервисный центр ШПД / techsupp@eltex.nsk.ru

norguhtar
Сообщения: 19
Зарегистрирован: 30 янв 2017 01:54
Reputation: 0

Re: Работа со свитчами через paramiko из Python

Сообщение norguhtar » 21 мар 2017 11:08

Голубцов Дмитрий писал(а):Из каких соображений вы приняли решение о "кривости" CLI? Очень странно, когда человек пишет такие фразы только из-за того, что какой-то инструмент не заработал как надо с первого раза. Пробовали ли вы другие варианты автоматизации?


Я пробовал 3 разных модуля для CLI и все три работают весьма и весьма странно. Если вы считаете что с CLI проблем нет то не могли бы вы привести примеры работы с CLI коммутатора. Из perl при помощи к примеру Net::SSH2 и из python при помощи модуля paramiko. Нужно буквально выполнение 3 сценариев.

  • Получение информации в не привилегированном режиме. К примеру sh ver
  • Включение привилегированного режима. И вывод информации по порту sh interfaces switchport gi 0/1
  • Включение режима конфигурации и к примеру выключение порта

На данный момент даже первый сценарий работает только в одной вариации. Причем тот же paramiko отлично работает и с linux и mikrotik. А вот с коммутатором eltex не работает по той же схеме. По мне это как раз таки говорит о проблемах не в модуле, а софте коммутатора. К примеру своя особенная эмуляция терминала. По этому и задаются вопросы.

norguhtar
Сообщения: 19
Зарегистрирован: 30 янв 2017 01:54
Reputation: 0

Re: Работа со свитчами через paramiko из Python

Сообщение norguhtar » 21 мар 2017 11:14

Evgen_94 писал(а):Вы под каким пользователем пытаетесь зайти? С какой привилегией? Если у пользователя 15 привилегия, то вы уже заходите в привилегированном режиме.

Это как? Приглашение выглядит как

Код: Выделить всё

console>

И без ввода enable банально не доступны команды.

Evgen_94 писал(а):Попробуйте задать пароль на enable,и в скрипте укажите этот пароль

Код: Выделить всё

acc = Account('user','pass','enable')

Логика выполнения команды conn.execute такая: если при подключении к железке в консоле будет решетка на конце, то enable не будет использоваться, если на конце будет > , то по умолчанию будет использоваться команда enable. На месах на enable необходимо обязательно задать пароль.


Эммм. Ничего не понял. Почему при банальном ручном подключении ssh этого всего не требуется? И все работает. А тут начинаются какие-то танцы с бубном. Так же не понял почему обязательно требуется указание пароля на enable

Evgen_94
Сообщения: 239
Зарегистрирован: 16 дек 2016 09:15
Reputation: 0

Re: Работа со свитчами через paramiko из Python

Сообщение Evgen_94 » 21 мар 2017 11:46

еа не работает вами предложенный модуль. Попробуйте к примеру получить вывод

Код: Выделить всё
conn.execute('enable')
print conn.response
conn.execute('sh interfaces switchport gi 0/1')
print conn.response

Попробуйте убрать.

Код: Выделить всё

 conn.execute('enable')
    print conn.response
Евгений Киселев / Элтекс / Сервисный центр ШПД / https://eltex-co.ru/support/

Evgen_94
Сообщения: 239
Зарегистрирован: 16 дек 2016 09:15
Reputation: 0

Re: Работа со свитчами через paramiko из Python

Сообщение Evgen_94 » 21 мар 2017 12:01

В СЦ скрипт отрабатывает. Для примера прикладываю.

Код: Выделить всё

#!/usr/bin/env python
from Exscript import Account
from Exscript.protocols import SSH2

acc = Account('test1','eltex')

conn = SSH2()
conn.connect('192.168.10.12')
conn.login(acc)
conn.execute('terminal datadump')
conn.execute('sh int switchport gi0/1')
print conn.response
conn.execute('sh run')
print conn.response
conn.execute('sh ver')
print conn.response
conn.send('exit\r')
conn.close()


Вывод:

Код: Выделить всё

./simple1.py
sh int switchport gi0/1
Port : gi1/0/1
Port Mode: Access
Gvrp Status: disabled
Ingress Filtering: true
Acceptable Frame Type: all
Ingress UnTagged VLAN ( NATIVE ): 10
Protected: Disabled
 
Port is member in:
 
Vlan               Name               Egress rule Port Membership Type
---- -------------------------------- ----------- --------------------
 10                 -                  Untagged          Static       

 
Forbidden VLANS:
Vlan               Name               
---- --------------------------------

 
Classification rules:
 
Protocol based VLANs:
  Group ID   Vlan ID
------------ -------

 
Mac based VLANs:
  Group ID   Vlan ID
------------ -------

 
Subnet based VLANs:
  Group ID   Vlan ID
------------ -------

sh run
vlan database
 vlan 10
exit
!
qos advanced
!
hostname MES2124MB
!
username test password encrypted 598be21a481bc492783ea6566abffefc6e4a316a privilege 15
username test1 password encrypted 598be21a481bc492783ea6566abffefc6e4a316a
!
line ssh
 password 598be21a481bc492783ea6566abffefc6e4a316a encrypted
exit
!
ip ssh server
!
interface gigabitethernet 1/0/1
 switchport access vlan 10
exit
!
interface gigabitethernet 1/0/2
 channel-group 1 mode auto
exit
!
interface gigabitethernet 1/0/3
 channel-group 2 mode on
exit
!
interface vlan 10
 ip address dhcp
exit
!
sh ver
SW version    1.1.44[a0025cf1] ( date  12-Jan-2016 time  16:23:25 )
Boot version    0.0.0.3 ( date  23-Feb-2011 time  17:40:14 )
HW version    01.07
Евгений Киселев / Элтекс / Сервисный центр ШПД / https://eltex-co.ru/support/

Голубцов Дмитрий
Сообщения: 85
Зарегистрирован: 16 окт 2014 12:50
Reputation: 0

Re: Работа со свитчами через paramiko из Python

Сообщение Голубцов Дмитрий » 21 мар 2017 12:08

Вот пример на expect, его можно легко перенести на питоновский pexpect. Скрипты на perl, paramiko и т.д. можете спросить у других участников форума.

Код: Выделить всё

#!/usr/bin/expect
spawn ssh user@192.168.16.108
expect {
"word:" {send "user\r"}
"yes/no)?" {send "yes\r"; expect "word"; send "user\r"}
}
expect ">"
send "show version\r"
expect ">"
send "enable\r"
expect "#"
send "term data\r"
expect "#"
send "sh interfaces switchport gi 0/1\r"
expect "#"
send "conf\r"
expect "#"
send "int gi 0/12\r"
expect "#"
send "sh\r"
expect "#"
Голубцов Дмитрий / Eltex / Сервисный центр ШПД / techsupp@eltex.nsk.ru

norguhtar
Сообщения: 19
Зарегистрирован: 30 янв 2017 01:54
Reputation: 0

Re: Работа со свитчами через paramiko из Python

Сообщение norguhtar » 21 мар 2017 12:32

Голубцов Дмитрий писал(а):Вот пример на expect, его можно легко перенести на питоновский pexpect. Скрипты на perl, paramiko и т.д. можете спросить у других участников форума.


expect меня мало интересует. Меня интересуют пример на perl или praramiko и почему на них не работает. Пример на paramiko я привел выше и он не работает на eltex, причем совершенно аналогично не работает и Net::SSH2, т.е. свитч не возвращает данные. При этом на linux и mikrotik срабатывает без проблем.

norguhtar
Сообщения: 19
Зарегистрирован: 30 янв 2017 01:54
Reputation: 0

Re: Работа со свитчами через paramiko из Python

Сообщение norguhtar » 21 мар 2017 12:34

Evgen_94 писал(а):В СЦ скрипт отрабатывает. Для примера прикладываю.


Эм.. Ребят я не пойму почему в случае использования Exscript enable не требуется. А в случае простого подключения требуется?

И остается вопрос с конфигурацией. Или там тоже не требуется вводить configure?

norguhtar
Сообщения: 19
Зарегистрирован: 30 янв 2017 01:54
Reputation: 0

Re: Работа со свитчами через paramiko из Python

Сообщение norguhtar » 21 мар 2017 12:42

дополнительный вопрос зачем делается вот эта команда:

Код: Выделить всё

conn.execute('terminal datadump')


Вернуться в «Коммутаторы и маршрутизаторы Ethernet»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 17 гостей