web-dev-qa-db-fra.com

Python: SSH dans le périphérique Cisco et exécutez les commandes show

J'ai relu ce post en profondeur et j'ai fait des recherches sur Exscript, paramiko, Fabric et pxssh et je suis toujours perdu Session ssh persistante sur le routeur Cisco . Je suis nouveau dans le script python.

J'essaie d'écrire un script dans Python qui va SSH dans un périphérique Cisco, exécutez "show version", affichez les résultats dans le bloc-notes, puis terminez le script.

Je peux faire fonctionner cela avec des commandes show qui ne nécessitent pas que l'utilisateur interagisse avec l'appareil. Par exemple:

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

Le script ci-dessus affichera les résultats de "show ip route".

Si j'essaye conn.execute ('show version'), le script arrive à expiration car le périphérique Cisco attend que l'utilisateur appuie sur la barre d'espace pour continuer, appuyez sur Entrée pour afficher la ligne suivante ou sur n'importe quelle touche pour revenir à la ligne de commande.

Comment puis-je exécuter la commande show version, appuyer deux fois sur la barre d'espace pour afficher la sortie entière de la commande show version, puis l'imprimer en python?

Je vous remercie!!!!

14
D3l_Gato

Essayez d'exécuter terminal length 0 avant d'exécuter show version. Par exemple:

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

Depuis la documentation du terminal Cisco: http://www.Cisco.com/en/US/docs/ios/12_1/configfun/command/reference/frd1003.html#wp1019281

18
peterjmag

Exécuter d'abord

terminal length 0

pour désactiver la pagination.

7
MattH

Je viens de demander la même chose et le code ci-dessous s'exécutera à partir d'une liste et obtiendra les informations que vous demandez.

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