2011-08-21 87 views
13

我已經讀了這篇文章,並廣泛研究了Exscript,的paramiko,面料和pxssh,我還是輸了Persistent ssh session to Cisco router。我是python腳本的新手。的Python:SSH到思科設備和運行show命令

我試圖用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?

謝謝!!!!

回答

17

嘗試運行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

+0

謝謝!我正在看這個完全錯誤的方式。謝謝你幫我看看外面的箱子:) –

7

首先執行

terminal length 0 

禁用分頁。

+0

謝謝!!!! ! –

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

兄弟,你瘋了,遲到了派對。 –

+0

是啊,不能否認,但更好的晚,然後永遠不會正確? –