在Twisted中使用Conch的SSH到SSH代理

2024-09-29 18:41:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试用Twisted编写一个SSH代理,它拦截SSH流量并将其转发到后端SSH服务器。在

在前端,我使用了一个修改过的Conch,下面的代码子类化为SSHSession:

def request_exec(self, data):
    cmd,data = common.getNS(data)
    log.msg('executing command "%s"' % cmd)
    prot = session.SSHSessionClient()
    prot.transport = self
    pf = _ProtocolFactory(prot)
    ep = endpoints.SSHCommandClientEndpoint.newConnection(reactor, cmd,
        USER, HOST, port=PORT, password=PASSWORD)
    ep.connect(pf)
    self.client = prot
    return 1

\u ProtocolFactory类如下所示:

^{pr2}$

整个系统接受用户的连接,我可以看到它成功地登录到后端。在

我遇到的问题是如何将stdout/stdin通道相互连接。 后端连接上的SSHSession需要连接到前端的SSHSession。我试着把协议作为中间环节,但我不认为这是正确的。在

更新:单向数据传输是通过使用一个自定义协议来实现的,该协议可以转换客户机/服务器功能(因此dataReceived被映射为write,反之亦然:

^{3}$

Tags: self服务器cmd协议代理datatwistedssh

热门问题