netcat /通过ssh命名pipe道代理

我习惯使用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连接到我的networking。

我正在尝试使用netcat与命名pipe道:

在远程机器上:

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

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

但似乎并不奏效。

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

没有运气

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

如果我只是pipe这个像: nc -k -l 2182 | nc service 2181 nc -k -l 2182 | nc service 2181我确实看到远程机器上的服务响应。 所以我可以一直到服务,并返回到远程机器,但它停在那里:

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

所以我不明白为什么命名pipe道不会通过SSH连接将响应转发回本地计算机。

echo message | nc localhost 2182 远程机器上的echo message | nc localhost 2182不会在本地机器上输出任何东西,所以它不是通过SSH出于某种原因。

任何想法,为什么这是如何解决它?

感谢帮助。

(编辑清晰)注意:我需要这个,因为我只能SSH到一台机器,这是一个集群的一部分,该机器有权访问服务(S)。 我不想把服务暴露在外面,也不要每个服务容器都有SSHD。

我曾经指出,人们可以简单地做到这一点

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

将连接转发到从remote-machinelocal-machine端口的service

简单而高效。

你可以使用-R来达到这个目的:

 ssh -R 8080:127.0.0.1:7070 yourhost 

这将在您的主机上打开一个端口:7070转发到本地主机:8080

文档说

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