Подтвердить что ты не робот

Python: SSH в устройство Cisco и запуск команд show

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

Я пытаюсь написать script в Python, который будет SSH в устройстве Cisco, запустить "show version", отобразить результаты в блокноте, а затем закончить script.

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

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()                        

Вышеупомянутый script отобразит результаты "show ip route".

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

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

Спасибо!!!!

4b9b3361

Ответ 1

Попробуйте выполнить 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

Ответ 2

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

terminal length 0

чтобы отключить пейджинг.

Ответ 3

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

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()