【问题标题】:Catch sshtunnel exception with Python用 Python 捕获 sshtunnel 异常
【发布时间】: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


【解决方案1】:

因此,捕获异常的问题在代码的稍后阶段得到解决。

触发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|except 包裹tn.expect 就可以了。所以现在我...

        try:
            i = self.tn.expect(PROMPT_LOGIN, TIME_LOGIN)
        except:
            quit()

...在可达性问题的情况下,我可以赶上它。

不知道这是否是更优雅/正确的做法,但至少可以工作......

谢谢!

卢卡斯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 2012-11-11
    • 1970-01-01
    • 2013-06-04
    • 2016-07-01
    • 2014-12-24
    相关资源
    最近更新 更多