通过 SSH 的命名管道代理

通过 SSH 的命名管道代理

我习惯于使用 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 进行传输。

知道这是为什么以及如何解决它吗?

感谢帮助。

答案1

正如@ysdx 指出的那样

简单的解决方案是:

ssh -L 2181:service:2182 user@server

相关内容