ssh -R 然后通过 HTTP 公开本地端口?

ssh -R 然后通过 HTTP 公开本地端口?

这是我的情况,我有两台机器,A 和 B。A 位于 VPN 后面,因此 B 无法访问 A。我有一个 Web 服务器:

machine_a$ curl localhost:8088 "hello from machine_a"

我已经执行了远程 SSH 隧道,如下所示:

machine_a$ ssh -R 8088:machine_a:8088 machine_b -N &

在机器 B 上,我可以验证隧道确实打开了:

machine_b$ curl localhost:8088 "hello from machine_a"

我如何让 machine_b 监听 8089 上的 HTTP 流量并将路由/管道/任何内容路由到本地可用端口 8088(该端口又是 machine_a 上 HTTP 服务器的远程端口)?

(此外,我在 machine_b:8089 上设置了一个虚拟服务器,并确保它是打开的。

答案1

使用 socat,这可以满足我的目的:

machine_b$ socat TCP-LISTEN:8089,su=nobody,fork,reuseaddr TCP-CONNECT:127.0.0.1:8088

这告诉 socat 监听 TCP 端口 8889 并将其连接到本地 8088。它以用户身份运行nobody,以提高安全性。fork 选项意味着它将重新协商传入端口,以便它不会阻塞。

从我的机器上进行卷曲:

my_machine$ curl machine_b:8089 "hello from machine_a"

答案2

nc -l 8089 | nc localhost 8088

相关内容