【发布时间】:2017-12-30 03:38:06
【问题描述】:
我有一个 python 代码,它建立一个到远程服务器的 SSH 连接,以进一步将 telnet 流量转发到隐藏在该服务器后面的几个路由器,以便远程管理这些。代码如下:
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:是的,确实。代码很长,所以我没有完整地发布它。但是,再次查看代码后,我发现了错误。我会发布它作为答案。谢谢!
标签: python exception paramiko ssh-tunnel telnetlib