我有一個python代碼,它啓動一個到遠程服務器的SSH連接,以進一步將telnet流量轉發到隱藏在此服務器後面的幾個路由器,以便遠程管理這些流量。代碼如下:用Python捕獲sshtunnel異常
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()
這是工作非常好。的確,我可以用這個代碼輕鬆地管理幾臺路由器,前提是有遠端路由器的網絡。
當遠程路由器(換句話說,組合127.0.0.1:self.localPort -> self.systemIP, 23
)由於某些事情(超時,無路由可用等)而無法到達時,會出現此問題。
在這種情況下,我得到以下錯誤:
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
儘管這些錯誤是正確的(實際上有沒有可達遠程路由器)我不能趕上這個錯誤:Python程序卡住有永遠,我不能退出它正確(即:if error -> quit()
)
你有任何線索如何做到這一點?
謝謝!
盧卡斯
我有感覺的代碼,最重要的一點是人仍下落不明,因爲這些都只是2個函數定義中,從顯示的實際錯誤消息時,異常從未提出。 – Uvar
Hi @Uvar:確實如此。代碼很長,這就是爲什麼我沒有發佈完成。但是,在再次查看代碼後,我發現了這個錯誤。我會把它作爲答案發布。謝謝! –