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

Pla*_*Fan 2 python tunnel paramiko

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

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

我已经看到了对server.shutdown()方法的引用,但目前尚不清楚如何正确实现它.

任何帮助将不胜感激...

Ale*_*lli 5

我不确定你的意思是"正确实现" - 你只需要跟踪服务器对象并shutdown在需要时调用它.在forward.py,服务器没有跟踪,因为最后一行forward_tunnel

ForwardServer(('', local_port), SubHander).serve_forever()
Run Code Online (Sandbox Code Playgroud)

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

global theserver
theserver = ForwardServer(('', local_port), SubHander)
theserver.serve_forever()
Run Code Online (Sandbox Code Playgroud)

forward_tunnel在一个单独的线程中运行该函数,以便该main函数获得控制权(当serve_forever在所述单独的线程中运行时)并且可以theserver.shutdown()在适当且需要时调用.