web-dev-qa-db-ja.com

Python:CiscoデバイスにSSH接続し、showコマンドを実行します

私はこの投稿を広範囲にわたって読み、Exscript、paramiko、Fabric、pxsshを調査しましたが、それでも失われています Ciscoルーターへの永続的なsshセッション 。私はpythonスクリプト作成に不慣れです。

Pythonでスクリプトを記述して、CiscoデバイスにSSHで接続し、「show version」を実行し、結果をメモ帳に表示して、スクリプトを終了します。

ユーザーがデバイスと対話する必要のない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デバイスがスペースバーを押して続行することを期待しているため、スクリプトがタイムアウトし、returnキーを押して次の行を表示するか、任意のキーを押してコマンドラインに戻ります。

Show versionコマンドを実行し、スペースバーを2回押してshow versionコマンドの出力全体を表示し、それをpythonで印刷するにはどうすればよいですか?

ありがとうございました!!!!

14
D3l_Gato

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

シスコターミナルのドキュメントから: http://www.Cisco.com/en/US/docs/ios/12_1/configfun/command/reference/frd1003.html#wp1019281

18
peterjmag

最初に実行

terminal length 0

ページングを無効にします。

7
MattH

同じことを尋ねたところ、以下のコードがリストから実行され、必要な情報が取得されます。

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
Chris Jones