【问题标题】:Shutting Down SSH Tunnel in Paramiko Programmatically以编程方式关闭 Paramiko 中的 SSH 隧道
【发布时间】:2010-05-06 01:33:57
【问题描述】:

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

我们的限制是我们不能从 shell 激活它,然后手动终止 shell 以停止侦听器。我们需要打开SSH连接,隧道,通过隧道执行一些动作,关闭隧道,在python中关闭SSH连接。

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

【问题讨论】:

  • 您也可以尝试sshtunnel如果您想等到所有活动连接结束或.stop(force=True)关闭所有活动连接,则有两种情况关闭隧道.stop()

标签: python tunnel paramiko


【解决方案1】:

我不确定您所说的“正确实施”是什么意思——您只需要跟踪服务器对象并在需要时调用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 在所述单独的线程中运行)并且可以在适当和需要时调用theserver.shutdown()

【讨论】:

  • 漂亮!线程模块以及使 ForwardServer 可用就成功了。
  • 所以在你创建一个运行 ForwardServer 的线程的方法中,你会去 thread.theserver.shutdown() 吗??
猜你喜欢
  • 2011-05-23
  • 2017-12-07
  • 2021-01-25
  • 2023-04-02
  • 2010-12-13
  • 2020-11-09
  • 2011-12-06
  • 2013-03-24
  • 2012-03-15
相关资源
最近更新 更多