Python: SSH в устройство Cisco и запуск команд показа - PullRequest
13 голосов
/ 22 августа 2011

Я внимательно прочитал этот пост и исследовал Exscript, paramiko, Fabric и pxssh, и все еще теряюсь Постоянный сеанс ssh с маршрутизатором Cisco .Я новичок в сценариях Python.

Я пытаюсь написать сценарий на Python, который будет SSH на устройстве Cisco, запустить «показать версию», отобразить результаты в блокноте, а затем завершить сценарий.

Я могу заставить это работать с командами показа, которые не требуют, чтобы пользователь взаимодействовал с устройством.Например:

from Exscript.util.interact import read_login
from Exscript.protocols import SSH2

account = read_login()              
conn = SSH2()                       
conn.connect('192.168.1.11')     
conn.login(account)                 

conn.execute('show ip route')
print conn.response

conn.send('exit\r')               
conn.close()                        

Приведенный выше скрипт отобразит результаты «show ip route».

Если я попытаюсь использовать conn.execute ('show version'), то время ожидания сценария истечет, поскольку устройство Cisco ожидает, что пользователь нажмет пробел для продолжения, нажмите клавишу возврата, чтобы показать следующую строку, или любую клавишу для возвратав командной строке.

Как выполнить команду show version, дважды нажать клавишу пробела, чтобы отобразить весь вывод команды show version, а затем распечатать ее на python?

Спасибо !!!!

Ответы [ 3 ]

18 голосов
/ 22 августа 2011

Попробуйте выполнить terminal length 0 перед запуском show version. Например:

from Exscript.util.interact import read_login
from Exscript.protocols import SSH2

account = read_login()              
conn = SSH2()                       
conn.connect('192.168.1.11')     
conn.login(account)  

conn.execute('terminal length 0')           

conn.execute('show version')
print conn.response

conn.send('exit\r')               
conn.close()  

Из документов терминала Cisco: http://www.cisco.com/en/US/docs/ios/12_1/configfun/command/reference/frd1003.html#wp1019281

7 голосов
/ 22 августа 2011

Сначала выполните

terminal length 0

, чтобы отключить подкачку.

2 голосов
/ 06 сентября 2016

Я только что спросил то же самое, и приведенный ниже код будет запущен из списка и получит запрашиваемую вами информацию.

from __future__ import print_function
from netmiko import ConnectHandler
import sys
import time
import select
import paramiko
import re
fd = open(r'C:\NewdayTest.txt','w') # Where you want the file to save to.
old_stdout = sys.stdout   
sys.stdout = fd 
platform = 'cisco_ios'
username = 'username' # edit to reflect
password = 'password' # edit to reflect

ip_add_file = open(r'C:\IPAddressList.txt','r') # a simple list of IP addresses you want to connect to each one on a new line

for host in ip_add_file:
    host = host.strip()
    device = ConnectHandler(device_type=platform, ip=host, username=username, password=password)
    output = device.send_command('terminal length 0')
    output = device.send_command('enable') #Editable to be what ever is needed
    print('##############################################################\n')
    print('...................CISCO COMMAND SHOW RUN OUTPUT......................\n')
    output = device.send_command('sh run')
    print(output)
    print('##############################################################\n')
    print('...................CISCO COMMAND SHOW IP INT BR OUTPUT......................\n')
    output = device.send_command('sh ip int br')
    print(output) 
    print('##############################################################\n')

fd.close()
...