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

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

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

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

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

Модуль Exscript по командне login автоматически логинится на устройство и автоматически заходит в привилегированный режим (enable) если не увидит # в приглашении.
дополнительный вопрос зачем делается вот эта команда:

Код: Выделить всё
conn.execute('terminal datadump')

terminal datadump нужен для отображения вывода команд без разделения на страницы.
Евгений Киселев / Элтекс / Сервисный центр ШПД / https://eltex-co.ru/support/

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

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

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

Приведите пример скрипта на perl, который "не работает".
Голубцов Дмитрий / Eltex / Сервисный центр ШПД / techsupp@eltex.nsk.ru

Dzirrot
Сообщения: 4
Зарегистрирован: 11 ноя 2016 13:56
Reputation: 0

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

Сообщение Dzirrot » 29 май 2017 14:45

Добрый день, все таки хотелось бы узнать почему не работает библиотека paramiko из Python с Cli. И когда возможно заработает. Увы не нашел ожидания конца строки в paramiko.

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

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

Сообщение norguhtar » 31 май 2017 23:18

Dzirrot писал(а):Добрый день, все таки хотелось бы узнать почему не работает библиотека paramiko из Python с Cli. И когда возможно заработает. Увы не нашел ожидания конца строки в paramiko.


Она работает. Только не через exec_command. Пример работающего скрипта:

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

#!/usr/bin/python

import paramiko
import re
import time
import logging
logging.basicConfig(level=logging.DEBUG)

host = "test"
user = "test"
pwd = "test"
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=host, username=user, password=pwd)

channel = client.invoke_shell()

output = channel.recv(65535)
print "login: ", output

channel.send("sh ver\n")
time.sleep(.5)
output = channel.recv(65535)
print "send:", output

channel.send("enable\n")
time.sleep(.5)
output = channel.recv(65535)
print "enable:", output

channel.send("sh interfaces switchport gi 0/1\n")
time.sleep(.5)
output = channel.recv(65535)
print "sh interfaces:", output

client.close()


Через exec_command не работает так-как там идет ожидание события, которого не наступает. Дополнительно в случае MES2124 нужно обновиться до 1.1.46. Иначе при вызове команд может повиснуть ssh. В приведенной версии эта проблема устранена и проблем при работе не возникает.

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

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

Сообщение norguhtar » 31 май 2017 23:43

Дополнительно выяснено что работает netmiko с использованием типа устройства hp_procurve. Но сильно тупит на такой вот команде

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

sh interfaces switchport gi 0/1


Почему могли бы рассказать разработчики, но они не горят желанием тестировать свой интерфейс с внешними библиотеками автоматизации.

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

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

Сообщение norguhtar » 01 июн 2017 01:10

Еще одно дополнение. В netmiko есть поддержка eltex. Так что можно указывать как тип устройства. Судя по всему работает как надо.

Николаище
Сообщения: 2
Зарегистрирован: 22 ноя 2019 09:09
Reputation: 0

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

Сообщение Николаище » 22 ноя 2019 10:33

Добрый день.
Написал на Exscript пару простеньких скриптов, например поиск мак адреса по всем коммутаторам сети, или перезагрузка кластера из 40 точек доступа.
Работаю над скриптом, который мог бы менять текущую конфигурацию коммутатора и сохранять её. С первым проблем нет, а вот со вторым трабл.
Если запустить такой скрипт:

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

from Exscript import Account
from Exscript.protocols import SSH2

acc = Account('admin','password')

def exconnect(ip):
    conn = SSH2()
    print('\nConnecting to ' + ip)
    try:
        conn.connect(ip)
        conn.login(acc)
        conn.execute('conf')
        print(conn.response)
        conn.execute('ip igmp snooping')
        print(conn.response)
        conn.execute('ex')
        print(conn.response)
        conn.execute('wr')
       
       
        conn.execute('y')
        print(conn.response)
        conn.send('exit')
        conn.close()
       
    except Exception as e:
        print(e)
     
if __name__ == "__main__":
    exconnect('192.168.20.67')

, то вывод будет

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

Connecting to 192.168.20.67
conf

ip igmp snooping

ex

Timeout while waiting for response from device

, причём перед последним предложением скрипт думает секунд 30. То есть очевидно, что скрипт не знает как или когда отправить подтверждающее "Y".
Пробовал перед отправкой "Y" вставить ожидание запроса: conn.set_prompt(r'Overwrite file \[startup-config\].... (Y\/N)\[N\] \?')
Но результат аналогичный.
Питон 3.7
Прошу помочь, как всё это верно оформить.

Николаище
Сообщения: 2
Зарегистрирован: 22 ноя 2019 09:09
Reputation: 0

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

Сообщение Николаище » 04 дек 2019 17:57

Почитал документацию и сделал таким образом:

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

def exconnect(ip):
    conn = SSH2()
    print('\nConnecting to ' + ip)
    try:
        conn.connect(ip)
        conn.login(acc)
        conn.execute('conf')
        conn.execute('loopback-detection enable')
        conn.execute('ex')

        conn.set_prompt('\?')
        conn.execute('wr')
        conn.set_prompt()
        conn.execute('y')
        conn.send('exit')
        conn.close()
       
    except Exception as e:
        print(e)


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

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

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