Страница 2 из 2

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

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

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

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

terminal datadump нужен для отображения вывода команд без разделения на страницы.

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

Добавлено: 21 мар 2017 14:34
Голубцов Дмитрий
Приведите пример скрипта на perl, который "не работает".

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

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

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

Добавлено: 31 май 2017 23:18
norguhtar
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. В приведенной версии эта проблема устранена и проблем при работе не возникает.

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

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

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

sh interfaces switchport gi 0/1


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

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

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

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
Прошу помочь, как всё это верно оформить.

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)

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

Добавлено: 24 сен 2021 13:05
Николаище
От нефиг делать написал простенькую библиотеку-обёртку для Exscript. Может, будет интересно кому-то из ленивых. Хорошо работает с MES2324 из-под винды. Скачать: https://github.com/balduser/ex_wrapper

Например, можно быстро посмотреть в цикле, какая нагрузка на poe портах:

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

from ex_wrapper import Commutator

c = Commutator('192.168.1.1', 'admin', 'password')
for i in range(1, 25): # Checking GigabitEthernet ports from 1 to 24
   ans = c.get_poe(i, params=True):
   if ans['status']:
   print(i, ans['power'])


Или посмотреть конфигурацию vlan на портах:

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

from ex_wrapper import Commutator

c = Commutator('192.168.1.1', 'admin', 'password')
for i in range(1, 25): # Checking GigabitEthernet ports from 1 to 24
   if c.link_state(i):
      print(i, c.get_vlan(i))