在没有公共 IP 的不同网络的计算机之间创建 SSH over HTTP

在没有公共 IP 的不同网络的计算机之间创建 SSH over HTTP

我有一台具有公共 IP 的非根服务器,它只接受 HTTP 请求(不仅仅是端口限制),还有两台在不同网络上只有私有 IP 的本地计算机。我想在这些本地计算机之间建立 SSH 连接,可能通过服务器。

有没有办法可以在不重写 SSH 客户端/服务器的情况下做到这一点?

答案1

除非你在服务器上设置附加服务,否则没办法。

无论是否有防火墙,主要问题是 HTTP 每次在请求完成之后都会关闭连接,而 SSH 则需要不断打开连接。

答案2

答案3

即使没有 HTTP 服务器(严格意义上来说),我也可以做到这一点:

我使用的只是客户端两端的 node.js(一个 ssh 客户端一个 ssh 服务器)以及 firebase 来存储从 TCP 流读取的缓冲区(转换为字符串),并且根据 @Putnik 的回答/评论的一般指示(记住使用该allowHalfOpen选项),程序运行时几乎没有延迟。图形上,连接如下所示:

client1(ssh 客户端)<=>localhost1(tcp,fake-ssh 服务器)

client2 (ssh 服务器)<=>localhost2(tcp,fake-ssh 客户端)

localhost1<=>firebase(或真实的HTTP服务器)<=>localhost2

请注意,从 localhosts 到 firebase/server,可以按照自己的意愿对缓冲区进行编码/解码 - 只要它们是一对无损转换。因此,@RedGrittyBrick 的答案中另一个问题的链接(使用HTTP CONNECT)也应该有效,前提是该服务器上有足够的权限,并且可能会更快。

当然,代码中还有很多可以改进的地方,但我相信从安全性方面来看,这应该不会比使用 openSSH 直接连接更不安全。如果我错了,请纠正我。

相关内容