【问题标题】:How can I do SSH port forwarding from within Python Twisted?如何在 Python Twisted 中进行 SSH 端口转发?
【发布时间】:2012-09-24 12:35:41
【问题描述】:

有没有使用 Conch 从 Twisted 中使用端口转发选项启动与远程计算机的 SSH 会话的示例,以便可以通过隧道传输正常的 TCP 流量?

场景:

我有一台运行基于 Twisted 的自定义 Protobuf RPC 服务的服务器和一台安装了基于 Twisted 的 RPC 客户端的机器。服务器也在运行 SSH。我不想直接与服务器上的 RPC 服务对话,而是想从 RPC 客户端使用 SSH 连接到服务器,在服务器上设置端口转发,并使用 Protobuf 通过 SSH 隧道与 RPC 服务进行通信。

我已经能够手动设置端口转发,并通过将 RPC 客户端指向客户端框上的本地端口让 RPC 客户端与 RPC 服务通信,我只是好奇如何在其中执行此操作直接客户。

【问题讨论】:

    标签: python ssh twisted portforwarding


    【解决方案1】:

    如果 Twisted 中有改进的文档用于使用 Conch 做一些简洁的事情,那就太棒了(毕竟,还有多少其他可编程 SSH 库?)。在那个快乐的日子到来之前,阅读conch 命令行工具的实现可能会有很大帮助。

    在这里,我们可以看到命令行中的端口转发选项通过 SSH 连接转换为某些操作:

    https://github.com/twisted/twisted/blob/4ffbe9f6851dbe7e9172f55905f264ecf50da3a6/src/twisted/conch/scripts/conch.py#L226-L238

    我认为您是在询问本地转发规则,因此 localForwards 循环大致完成了您想做的事情。

    【讨论】:

    • 网址已死。试图找到并更新它 - 没有成功
    【解决方案2】:

    实现进行本地端口转发的隧道 Twisted SSH 客户端可能非常简单。

    只需创建一个basic Twisted Conch SSH client,并在你的客户端的SSH连接类的serviceStarted方法中实现端口转发部分:

    from twisted.conch.ssh import forwarding
    
    LOCALPORT = 8888
    REMOTEHOST = "127.0.0.1"
    REMOTEPORT = 9999
    
    class Connection(connection.SSHConnection):
    
        def serviceStarted(self):
           Channel = forwarding.SSHListenClientForwardingChannel
           Factory = forwarding.SSHListenForwardingFactory
           factory = Factory(self, (REMOTEHOST, REMOTEPORT), Channel)
           s = reactor.listenTCP(LOCALPORT, factory)
    

    仅此而已(REMOTEHOST 设置为指向 ssh 服务器本身,因为这就是您所说的要连接的服务器)。

    【讨论】:

      猜你喜欢
      • 2016-02-14
      • 2015-02-09
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 2015-03-03
      • 2018-06-28
      • 2018-05-28
      • 2011-06-25
      相关资源
      最近更新 更多