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

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

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

Я могу заставить это работать с командами 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('exitr')               
conn.close()                        

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

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

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

спасибо!!!!

3 ответов


попробовать-исполнителя 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


сначала выполнить

terminal length 0

отключить подкачки.


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

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