Estoy acostumbrado a reenviar un puerto de servicio remoto en localhost usando ssh como:
ssh -L 2181:localhost:2182 user@server
(reenviar el puerto de host remoto 2182 al puerto local 2181)
ahora, desde la máquina a la que hago ssh, estoy intentando llegar a un servicio tcp y reenviar la respuesta a mi máquina local:
local-machine:2181 <-- SSH --> remote-machine:2182 <-- netcat/named pipe --> service:2181
Nota: No tengo acceso directo a la máquina de servicio, solo tengo acceso a la red a través de la máquina a la que estoy conectado mediante SSH.
Estaba intentando usar netcat con una canalización con nombre:
En la máquina remota:
mkfifo fifo
nc -k -l 2182 <fifo | nc service 2181 >fifo
En la máquina local:
echo message | nc localhost 2181
pero eso no parece funcionar.
También lo intenté, en una máquina remota.
nc -k -l 2182 0<fifo | nc service 2181 1>fifo
sin suerte
En la máquina remota nc -k -l 2182
aparece el mensaje que envío desde la máquina local: 2181
si simplemente canalizo esto como: nc -k -l 2182 | nc service 2181
Veo la respuesta del servicio en la máquina remota. Entonces puedo ir hasta el servicio y regresar a la máquina remota, pero se detiene allí:
local-machine:2181 <-/- SSH --> remote-machine:2182 <-- netcat --> service:2181
así que no entiendo por qué la canalización con nombre no reenvía la respuesta a través de la conexión ssh a mi máquina local.
echo message | nc localhost 2182
en la máquina remota NO genera nada en la máquina local, por lo que no pasa a través de SSH por alguna razón.
¿Alguna idea de por qué ocurre esto y cómo solucionarlo?
Gracias por la ayuda.
(EDITADO para mayor claridad) Nota: Necesito esto porque solo puedo usar SSH en una máquina, que es parte de un clúster, y esa máquina tiene acceso a los servicios. No quiero exponer el servicio al exterior, ni tener SSHD en cada contenedor de servicio.
Respuesta1
Me señalaron el hecho de que uno puede simplemente hacer
ssh -L 2181:service:2181 user@remote-machine
para reenviar la conexión service
desde remote-machine
al puerto en local-machine
.
simple y eficiente.
Respuesta2
Puedes usar -R para este propósito:
ssh -R 8080:127.0.0.1:7070 yourhost
Esto abrirá un puerto en yourhost:7070 que reenvía a localhost:8080
La documentación dice
[-R [bind_address:]port:host:hostport]