【问题标题】:Python: SSH into Cisco device and run show commandsPython:通过 SSH 连接到 Cisco 设备并运行 show 命令
【发布时间】:2011-10-31 17:36:15
【问题描述】:

我广泛阅读了这篇文章并研究了 Exscript、paramiko、Fabric 和 pxssh,但我仍然迷失了 Persistent ssh session to Cisco router。我是 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('exit\r')               
conn.close()                        

上面的脚本会显示“show ip route”的结果。

如果我尝试 conn.execute('show version') 脚本超时,因为 Cisco 设备希望用户按空格键继续,按回车键显示下一行或任何键退出命令线。

如何执行 show version 命令,按两次空格键显示 show version 命令的整个输出,然后在 python 中打印?

谢谢!!!!

【问题讨论】:

    标签: python ssh cisco


    【解决方案1】:

    我只是问了同样的事情,下面的代码将从列表中运行并获取您所要求的信息。

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

    【讨论】:

    • 兄弟,你迟到了。
    • 是的,不能否认这一点,但迟到总比永远好,对吧?
    【解决方案2】:

    在运行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()  
    

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

    【讨论】:

    • 谢谢!我以完全错误的方式看待这个问题。感谢您帮助我跳出我所处的框框:)
    【解决方案3】:

    首先执行

    terminal length 0
    

    禁用分页。

    【讨论】:

      最近更新 更多