如何在SSH中通过Twisted隧道任何Twisted协议(比如HTTP)?
我想用Twisted通过SSH隧道发送HTTP请求。我看到过一些使用Twisted设置SSH本地端口转发的例子,但这不是我想要的。
我觉得应该可以直接用Twisted把HTTP流量包裹在SSH隧道里,也就是说,不需要设置Twisted在本地端口上监听来转发流量。
我查看了Twisted Conch命令行脚本是如何进行本地端口转发的,具体在conch.ssh.forwarding里。那是否应该和HTTP客户端结合起来呢?或者,我还读到SSHChannel支持twisted.internet.interfaces.ITransport接口,这样可以把它交给协议来通过安全连接运行?另外,Twisted里还有一个比较新的端点API,我在想,是否可以为从SSH服务器开始的流量隧道设置一个端点?
还是说有其他的办法?
1 个回答
2
我在想,从SSH服务器开始进行流量隧道传输的接口是否有意义?
这确实是个好主意。
有一个接口可以把某种协议连接到远程运行的命令的标准输入输出,这个接口是通过Conch实现的,叫做twisted.conch.endpoints.SSHCommandClientEndpoint
。而且,关于使用Conch将协议连接到远程子系统(比如sftp)的接口,开发已经开始(不过看起来停滞不前了)。如果能有一个通过隧道连接到远程地址的接口,使用Conch来实现,那就更好了。
开始实现SSHSubsystemClientEndpoint
的分支可能会对你理解编写这个新接口的过程有帮助。此外,这个分支中可能还进行了有用的重构,使得添加这样的新接口变得更简单(因为这个分支正好添加了第二个Conch接口,可能需要对第一个接口的一些代码进行调整,以便更容易重用)。