Python:SSH到Cisco设备并运行show命令。

15

我仔细阅读了这篇文章并研究了Exscript、paramiko、Fabric和pxssh,但我仍然感到困惑。Persistent ssh session to Cisco router。我是Python脚本的新手。

我正在尝试编写一个Python脚本,用于SSH连接到Cisco设备,运行“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('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个回答

21
尝试在运行show version之前执行terminal length 0。例如:
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()  

来自思科终端文档:http://www.cisco.com/en/US/docs/ios/12_1/configfun/command/reference/frd1003.html#wp1019281


谢谢!我完全是从错误的角度来看待这个问题。感谢您帮助我打破思维定势 :) - D3l_Gato

7

首先执行

terminal length 0

禁用分页。

2
我刚刚问了同样的问题,下面的代码将从列表中运行并获取您要求的信息。
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()

兄弟,你来晚了,太不给面子了。 - D3l_Gato
1
是的,不能否认这一点,但迟做总比不做好,对吧? - Chris Jones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接