Ich habe einen Python-Code, der eine SSH-Verbindung zum Remote-Server bringt weiter Telnet-Verkehr zu mehreren Routern hinter diesem Server weitergeleitet, um diese remote zu verwalten. Der Code ist folgender:Catch sshtunnel Ausnahme mit Python
def sshStart(self):
try:
self.sshServer = SSHTunnelForwarder(
(SRVR_IP, SRVR_PORT),
ssh_username = SRVR_USER[0],
ssh_password = SRVR_USER[1],
remote_bind_address = (self.systemIP, 23),
local_bind_address = ("127.0.0.1", self.localPort)
)
self.sshServer.start()
except:
fncPrintConsole(self.strConn + "Error SSH Tunnel")
self.quit()
def routerLogin(self):
try:
self.tn = telnetlib.Telnet("127.0.0.1",self.localPort)
except:
fncPrintConsole(self.strConn + "No route to host!")
self.quit()
Das funktioniert sehr gut. In der Tat kann ich mehrere Router mit diesem Code problemlos verwalten, vorausgesetzt, es gibt eine Netzwerkverbindung zum fernen Router.
Das Problem tritt auf, wenn der Remote-Router (mit anderen Worten, die Kombination 127.0.0.1:self.localPort -> self.systemIP, 23
) wegen etwas nicht erreichbar ist (Timeout, kein Routing, etc ...).
In einem solchen Fall, bekomme ich folgende Fehlermeldung:
2017-07-24 10:38:57,409| ERROR | Could not establish connection from ('127.0.0.1', 50000) to remote side of the tunnel
2017-07-24 10:38:57,448| ERROR | Secsh channel 0 open FAILED: Network is unreachable: Connect failed
Auch wenn der Fehler korrekt ist (es gibt tatsächlich keine Erreichbarkeit an den Remote-Router) Ich kann nicht diesen Fehler fangen: das Python-Programm stecken bleibt dort für immer und ich kann es nicht richtig verlassen (zB: if error -> quit()
)
Haben Sie eine Ahnung, wie dies zu erreichen ist?
Danke!
Lucas
Ich habe das das wichtige Stück Code immer noch das Gefühl fehlt, da diese nur 2 Funktionsdefinitionen sind, in denen von den tatsächlichen Fehlermeldungen angezeigt, wird die Ausnahme nie ausgelöst. – Uvar
Hallo @Uvar: Ja, tatsächlich. Der Code ist lang, deshalb habe ich ihn nicht komplett ausgefüllt. Nachdem ich jedoch den Code erneut angesehen habe, habe ich den Fehler gefunden. Ich werde es als Antwort posten. Vielen Dank! –