使用Python捕获sshtunnel异常

2024-09-22 14:35:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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的组合)由于某种原因(超时、没有可用的路由等)而无法访问时,就会出现问题。在

在这种情况下,我得到以下错误:

^{pr2}$

即使错误是正确的(实际上远程路由器无法访问),我也无法捕捉到这个错误:python程序永远停留在那里,我无法正确地退出它(即:if error -> quit()

你知道如何完成这个任务吗?在

谢谢!在

卢卡斯


Tags: 代码self服务器远程def错误路由器ssh
1条回答
网友
1楼 · 发布于 2024-09-22 14:35:32

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

触发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()

。。。我真的希望在继续之前能得到一些线索。在

^{pr2}$

出于某些原因,我认为在创建tn连接时包含try | except就足够了。但是没有,我一直收到提到的SSH错误。在

tn.expect包装try|except就达到了这个目的。所以现在我。。。在

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

。。。在可及性问题的情况下,我可以在那里解决。在

不知道这是不是更优雅/正确的方法,但至少是有效的。。。在

谢谢!在

卢卡斯

相关问题 更多 >