是否有任何使用Conch从Twisted中启动与远程计算机的SSH会话以及端口转发选项的示例,以便可以通过隧道管道正常的TCP流量?
情景:
我有一台服务器运行自定义的基于Twisted的Protobuf RPC服务和一台安装了基于Twisted的RPC客户端的机器。服务器也在运行SSH。我不想直接与服务器上的RPC服务通信,而是使用来自RPC客户端的SSH连接到服务器,在服务器上设置端口转发,并使用Protobuf通过SSH隧道与RPC服务进行通信。
我已经能够手动设置端口转发并让RPC客户端通过将RPC客户端指向客户端盒上的本地端口来与RPC服务通信,我只是好奇我是如何在内部执行此操作的客户直接。
答案 0 :(得分:4)
如果在Twisted中有改进的文档可以使用Conch做一些整洁的事情(毕竟,还有多少其他可编程SSH库?)会很棒。在那个快乐的日子到来之前,阅读conch
命令行工具的实现可能会有很大的帮助。
在这里,我们可以看到命令行中的端口转发选项通过SSH连接转换为某些操作:
http://twistedmatrix.com/trac/browser/trunk/twisted/conch/scripts/conch.py#L188
我认为您在询问本地转发规则,因此localForwards
循环大致正在执行您想要执行的操作。
答案 1 :(得分:4)
实现隧道本地端口转发的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服务器本身,因为那是你所说的你要连接到的)。