用Python捕获sshtunnel异常
我有一个python代码,它打开到远程服务器的SSH连接,进一步将telnet流量转发到隐藏在该服务器后面的几个路由器,以便远程管理这些路由器。代码如下:用Python捕获sshtunnel异常,python,exception,paramiko,ssh-tunnel,telnetlib,Python,Exception,Paramiko,Ssh Tunnel,Telnetlib,我有一个python代码,它打开到远程服务器的SSH连接,进一步将telnet流量转发到隐藏在该服务器后面的几个路由器,以便远程管理这些路由器。代码如下: def sshStart(self): try: self.sshServer = SSHTunnelForwarder( (SRVR_IP, SRVR_PORT), ssh_username = SRVR_USER[0],
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()
)
你对如何做到这一点有什么线索吗
谢谢
Lucas因此,捕获异常的问题在代码的后期阶段得到了解决 触发telnet连接后
def routerLogin(self):
try:
self.tn = telnetlib.Telnet("127.0.0.1",self.localPort)
except:
fncPrintConsole(self.strConn + "No route to host!")
self.quit()
。。。在继续之前,我确实希望得到一些线索
i = self.tn.expect(PROMPT_LOGIN, TIME_LOGIN)
出于某种原因,我认为在创建tn
连接时包含try | except
就足够了。但是没有,我一直收到上面提到的SSH错误
用try |包装tn.expect
,但
成功了。所以现在我有
try:
i = self.tn.expect(PROMPT_LOGIN, TIME_LOGIN)
except:
quit()
。。。在可达性问题的情况下,我可以在那里找到它
不知道这是否是更优雅/正确的方式,但至少是有效的
谢谢
Lucas我感觉重要的代码仍然缺失,因为这只是两个函数定义,从实际显示的错误消息中,从未出现异常。Hi@Uvar:是的,的确如此。代码很长,这就是为什么我没有发布完整的代码。然而,在再次查看代码后,我发现了错误。我会把它作为答案贴出来。谢谢