我有一个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:确实如此。代码很长,这就是为什么我没有发布完成。但是,在再次查看代码后,我发现了这个错误。我会把它作为答案发布。谢谢! –