Назад | Перейти на главную страницу

прокси netcat / named pipe через 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 по одному на каждый контейнер службы.

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

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

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

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

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

ssh -R 8080:127.0.0.1:7070 yourhost

Это откроет порт на yourhost: 7070, который перенаправляет на localhost: 8080

В документации говорится

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