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
Я просто спросил то же самое, и приведенный ниже код будет запускаться из списка и получать информацию, которую вы просите.
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()