netcat / proxy de pipe nomeado sobre ssh

netcat / proxy de pipe nomeado sobre ssh

Estou acostumado a encaminhar uma porta de serviço remoto no host local usando ssh como:

ssh -L 2181:localhost:2182 user@server (encaminhe a porta do host remoto 2182 para a porta local 2181)

agora, da máquina para a qual faço ssh, estou tentando acessar um serviço tcp e encaminhar a resposta para minha máquina local:

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

Obs: Não tenho acesso direto à máquina de serviço, só tenho acesso à rede através da máquina que faço SSH.

Eu estava tentando usar o netcat com um pipe nomeado:

Na máquina remota:

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

Na máquina local: echo message | nc localhost 2181

mas isso não parece funcionar.

Eu também tentei, em máquina remota nc -k -l 2182 0<fifo | nc service 2181 1>fifo

sem sorte

Na máquina remota nc -k -l 2182gera a mensagem que envio da máquina local:2181

se eu simplesmente canalizar assim: nc -k -l 2182 | nc service 2181 vejo a resposta do serviço na máquina remota. Então, consigo ir até o serviço e voltar para a máquina remota, mas para por aí:

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

então não entendo por que o pipe nomeado não encaminha a resposta por meio da conexão ssh de volta para minha máquina local.

echo message | nc localhost 2182na máquina remota NÃO gera nada de volta na máquina local, portanto, não está passando pelo SSH por algum motivo.

Alguma ideia de por que isso acontece e como consertar?

Obrigado pela ajuda.

(EDITADO para maior clareza) Observação: preciso disso porque só posso usar SSH para uma máquina, que faz parte de um cluster, e essa máquina tem acesso ao(s) serviço(s). Não quero expor o serviço ao exterior, nem ter SSHD em cada contêiner de serviço.

Responder1

Fui apontado para o fato de que se pode simplesmente fazer

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

para encaminhar a conexão servicede remote-machinepara a porta em local-machine.

simples e eficiente.

Responder2

Você pode usar -R para esta finalidade:

ssh -R 8080:127.0.0.1:7070 yourhost

Isso abrirá uma porta em yourhost:7070 que encaminha para localhost:8080

A documentação diz

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

informação relacionada