Estou acostumado a encaminhar uma porta de serviço remoto no host local usando ssh como:
ssh -L 2181:localhost:2182 user@server
(encaminhar a porta do host remoto 2182 para a porta local 2181)
agora, da máquina para a qual 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
Nota: Não tenho acesso direto à máquina de serviço, só tenho acesso à rede através da máquina para a qual 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, na máquina remota
nc -k -l 2182 0<fifo | nc service 2181 1>fifo
sem sorte
Na máquina remota, nc -k -l 2182
emite a mensagem que envio da máquina local: 2181
se eu simplesmente canalizar isso como: nc -k -l 2182 | nc service 2181
vejo a resposta do serviço na máquina remota. Então, posso 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
portanto, não entendo por que o canal nomeado não encaminha a resposta por meio da conexão ssh de volta para minha máquina local.
echo message | nc localhost 2182
na máquina remota NÃO gera nada de volta na máquina local, então não está passando por SSH por algum motivo.
Alguma ideia de por que isso acontece e como corrigi-lo?
Obrigado pela ajuda.
(EDITADO para maior clareza) Observação: preciso disso porque só posso fazer 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 para fora, nem ter SSHD um a cada contêiner de serviço.
Fui apontado para o fato de que alguém pode simplesmente fazer
ssh -L 2181:service:2181 user@remote-machine
para encaminhar a conexão
service
deremote-machine
para a porta emlocal-machine
.simples e eficiente.
Você pode usar -R para esta finalidade:
Isso abrirá uma porta em yourhost:7070 que encaminha para localhost:8080
A documentação diz