以编程方式关闭Paramiko中的SSH隧道

时间:2010-05-06 01:33:58

标签: python tunnel paramiko

我们正在尝试使用paramiko模块按需创建SSH隧道到任意服务器,以便查询远程数据库。我们尝试使用paramiko附带的forward.py演示,但最大的限制是在启动套接字服务器后似乎没有一种简单的方法可以关闭SSH隧道和SSH连接。

我们的限制是我们无法从shell激活它,然后手动终止shell以停止列表器。我们需要打开SSH连接,隧道,通过隧道执行一些操作,关闭隧道,并关闭python中的SSH连接。

我见过对server.shutdown()方法的引用,但不清楚如何正确实现它。

非常感谢任何帮助......

1 个答案:

答案 0 :(得分:5)

我不确定“正确实现”是什么意思 - 您只需要跟踪服务器对象并在需要时调用shutdown。在forward.py中,服务器未跟踪,因为forward_tunnel的最后一行是

ForwardServer(('', local_port), SubHander).serve_forever()

因此服务器对象不再容易访问。但你可以改变它,例如:

global theserver
theserver = ForwardServer(('', local_port), SubHander)
theserver.serve_forever()

并在一个单独的线程中运行forward_tunnel函数,以便main函数获得控制权(当serve_forever在所述单独的线程中运行时)并且可以调用{{1只要合适又需要。