通过 ssh 进行 netcat / 命名管道代理

通过 ssh 进行 netcat / 命名管道代理

我习惯使用 ssh 在本地主机上转发远程服务端口,例如:

ssh -L 2181:localhost:2182 user@server (将远程主机端口2182转发到本地端口2181)

现在,从我通过 ssh 连接到的机器,我尝试访问 tcp 服务并将响应转发到我的本地机器:

local-machine:2181 <-- SSH --> remote-machine:2182 <-- netcat/named pipe --> service:2181

注意:我无法直接访问服务机器,我只能通过我通过 SSH 连接到的机器访问网络。

我试图使用带有命名管道的 netcat:

在远程机器上:

mkfifo fifo
nc -k -l 2182 <fifo | nc service 2181 >fifo

在本地机器上: echo message | nc localhost 2181

但这似乎不起作用。

我也在远程机器上尝试过 nc -k -l 2182 0<fifo | nc service 2181 1>fifo

没有运气

在远程机器上nc -k -l 2182输出我从本地机器发送的消息:2181

如果我只是像这样管道化:nc -k -l 2182 | nc service 2181 我确实看到了来自远程机器上服务的响应。因此,我可以一路转到服务并返回到远程机器,但它停在那里:

local-machine:2181 <-/- SSH --> remote-machine:2182 <-- netcat --> service:2181

所以我不明白为什么命名管道不会通过 ssh 连接将响应转发回我的本地机器。

echo message | nc localhost 2182远程机器上不会在本地机器上输出任何内容,因此由于某种原因它无法通过 SSH 完成。

知道为什么会这样以及如何解决吗?

感谢帮助。

(为清晰起见进行了编辑)注意:我需要这个,因为我只能通过 SSH 连接到一台机器,它是集群的一部分,并且该机器可以访问服务。我不想将服务暴露给外部,也不想让每个服务容器都使用 SSHD。

答案1

我被指出,事实上,人们可以简单地做

ssh -L 2181:service:2181 user@remote-machine

service将到 的连接转发remote-machine到 上的端口local-machine

簡單、高效。

答案2

您可以使用 -R 来实现此目的:

ssh -R 8080:127.0.0.1:7070 yourhost

这将在 yourhost:7070 上打开一个端口,该端口转发到 localhost:8080

文档说

[-R [bind_address:]port:host:hostport]

相关内容