netcat / именованный канал прокси через ssh

netcat / именованный канал прокси через ssh

Я привык перенаправлять порт удаленной службы на localhost с помощью 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.

Есть идеи, почему это происходит и как это исправить?

Спасибо за помощь.

(ОТРЕДАКТИРОВАНО для ясности) Примечание: Мне это нужно, потому что я могу подключиться по SSH только к одной машине, которая является частью кластера, и эта машина имеет доступ к сервису(ам). Я не хочу выставлять сервис наружу, и не хочу иметь SSHD по одному на каждый контейнер сервиса.

решение1

Мне указали на тот факт, что можно просто сделать

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

для перенаправления соединения serviceс remote-machineна порт на local-machine.

просто и эффективно.

решение2

Для этой цели можно использовать -R:

ssh -R 8080:127.0.0.1:7070 yourhost

Это откроет порт на yourhost:7070, который будет перенаправлен на localhost:8080.

Документация гласит

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

Связанный контент