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?
Спасибо!!!!
Ответы
Ответ 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()