2011-11-16 2 views
1

J'essaie d'écrire un script simple pour connecter le commutateur Cisco C2960.Je n'arrive pas à comprendre comment réutiliser la session ssh pour l'exécuter plus de deux commandes.Paramiko: impossible de réutiliser la session ssh lors de la connexion au commutateur Cisco C2960

Il y a une discussion sur le SO,
Persistent ssh session to Cisco router
mais aucune des réponses fournies, il peut résoudre mon problème.

Voici mon code:

import paramiko 
ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect('xxx',username='xxx',password='xxx',allow_agent=False) 
stdin, stdout, stderr = ssh.exec_command('show version') 
stdin, stdout, stderr = ssh.exec_command('sh mac brief') 

Résultats dans:

Traceback (most recent call last): 
    File "./test.py", line 10, in <module> 
    stdin, stdout, stderr = ssh.exec_command('sh mac brief') 
    File "/usr/lib/python2.6/site-packages/paramiko/client.py", line 363, in exec_command 
    chan = self._transport.open_session() 
    File "/usr/lib/python2.6/site-packages/paramiko/transport.py", line 658, in open_session 
    return self.open_channel('session') 
    File "/usr/lib/python2.6/site-packages/paramiko/transport.py", line 746, in open_channel 
    raise e 
EOFError 

Répondre

0

j'ai répondu sur la référence SO question, mais avez-vous essayez d'utiliser invoke_shell()?

J'ai vu de nombreux rapports que certains périphériques Cisco n'autorisent qu'une seule exécution de commande avant la fermeture de la connexion (cela peut toutefois être configurable quelque part dans le périphérique). Dans ce cas, vous devez démarrer un shell et travailler de manière interactive (ou pseudo-interactive comme avec pexpect), ou créer un script à envoyer en une seule commande.

+0

Je dois utiliser 'pexpect' au lieu de' paramiko' :-(Et BTW quelle est l'option pour activer plusieurs commandes pour IOS? merci :-) – yegle

+0

Non, vous pouvez utiliser 'pexpect' avec paramiko pour écrire un script avec une invite interactive. Je ne travaille pas avec IOS moi-même, je devine juste qu'il peut y avoir une option pour activer la commande multiple. – JimB

1

invoke_shell() est préférable lors de l'interaction avec Cisco IOS, j'ai essayé d'autres fucntions à paramiko mais tous les jeter erreurs de fichier buggy EOF

Questions connexes