2011-08-21 27 views
13

Tôi đã đọc qua bài đăng này một cách rộng rãi và đã nghiên cứu Exscript, paramiko, Fabric và pxssh và tôi vẫn bị mất Persistent ssh session to Cisco router. Tôi mới vào kịch bản python.Python: SSH vào thiết bị Cisco và chạy lệnh show

Tôi đang cố gắng viết một tập lệnh bằng Python sẽ SSH vào thiết bị Cisco, chạy "hiển thị phiên bản", hiển thị kết quả trong notepad, sau đó kết thúc tập lệnh.

Tôi có thể làm việc này với các lệnh show không yêu cầu người dùng tương tác với thiết bị. Ví dụ:

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

Tập lệnh trên sẽ hiển thị kết quả "hiển thị tuyến đường ip".

Nếu tôi thử conn.execute ('show version') tập lệnh hết thời gian chờ vì thiết bị Cisco đang mong người dùng nhấn phím cách để tiếp tục, nhấn quay lại để hiển thị dòng tiếp theo hoặc bất kỳ phím nào để quay lại dòng lệnh.

Làm cách nào để thực hiện lệnh phiên bản chương trình, nhấn thanh dấu cách hai lần để hiển thị toàn bộ đầu ra của lệnh phiên bản chương trình, sau đó in nó trong python?

Cảm ơn bạn !!!!

Trả lời

17

Hãy thử thực hiện terminal length 0 trước khi chạy show version. Ví dụ:

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

Từ các tài liệu thiết bị đầu cuối Cisco: http://www.cisco.com/en/US/docs/ios/12_1/configfun/command/reference/frd1003.html#wp1019281

+0

Cảm ơn bạn! Tôi đã nhìn vào điều này một cách sai lầm hoàn toàn. Cảm ơn vì đã giúp tôi nhìn ra ngoài chiếc hộp mà tôi đã ở trong đó :) –

7

Đầu tiên thực hiện

terminal length 0 

để vô hiệu hóa phân trang.

+0

Cảm ơn bạn !!!! ! –

1

Tôi chỉ hỏi những điều tương tự và mã dưới đây sẽ chạy từ một danh sách và có được thông tin bạn đang yêu cầu.

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

Bro, bạn điên cuồng đến bữa tiệc. –

+0

Không thể phủ nhận điều đó nhưng muộn hơn thì không bao giờ mặc dù đúng? –

Các vấn đề liên quan