6

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

设想:

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

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

4

2 回答 2

4

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

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

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

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

于 2012-10-03T20:18:41.070 回答
4

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

只需创建一个基本的 Twisted Conch SSH 客户端,并在您的客户端的 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 服务器本身,因为这就是您所说的要连接的内容)。

于 2014-05-08T17:52:34.577 回答