Persistente ssh-Sitzung für Cisco-router
Ich Suche auf dieser Website und mehreren anderen Orten, aber ich habe nicht in der Lage war zu beheben, mein problem ist der Anschluss und die Aufrechterhaltung der ssh-Sitzung nach einem Befehl. Unten ist mein Aktueller code:
#!/opt/local/bin/python
import os
import pexpect
import paramiko
import hashlib
import StringIO
while True:
cisco_cmd = raw_input("Enter cisco router cmd:")
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('192.168.221.235', username='nuts', password='cisco', timeout = 30)
stdin, stdout, stderr = ssh.exec_command(cisco_cmd)
print stdout.read()
ssh.close()
if cisco_cmd == 'exit': break
Kann ich mehrere Befehle, sondern für alle Befehle, die eine neue ssh-Sitzung wird erstellt.
Das obige Programm funktioniert nicht, wenn ich brauche, um Konfigurations-Modus, weil der ssh-Sitzung
wird nicht wiederverwendet.Jede Hilfe bei der Lösung dieser Angelegenheit wird sehr geschätzt.
- Ich bin fasziniert von einem Skript, dass die Einfuhren sowohl pexpect und paramiko... Bist du mit beiden auf einmal, oder versuchen, ein und migrieren?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich verwendet Exscript statt paramiko und ich bin jetzt in der Lage zu bekommen, persistent session auf dem IOS-Gerät.
Müssen Sie zum erstellen, verbinden und Verbindung schließen außerhalb der while-Schleife.
Deine Schleife nicht, dass
Bewegen Sie die Initialisierung und setup außerhalb der Schleife.
EDIT: Verschoben close()
ssh.close()
sollte nicht in der Schleife entweder.Ihre ssh - Sitzung wiederverwendet wird, sobald Sie bewegen die
connect
undclose
außerhalb der Schleife, aber jederexec_command()
passiert, in eine neue shell (durch ein neues Kanal -), und unabhängig sind. Formatieren Sie Ihre Befehle, so dass Sie nicht verlangen, jeder Staat, der von der shell aus.Wenn ich mich richtig erinnere, einige Cisco-Geräte erlauben nur ein einziges exec und dann die Verbindung schließen. In diesem Fall müssen Sie
invoke_shell()
und arbeiten interaktiv mit dempexpect
- Modul (die Sie bereits importiert haben, aber nicht verwenden).