ssh -R тогда выставить локальный порт через HTTP?

Вот мой сценарий, у меня есть две машины, A и B. A находится за VPN, поэтому B не может добраться до A. У меня есть веб-сервер:

machine_a$ curl localhost:8088 "hello from machine_a"

Я выполнил удаленный туннель SSH следующим образом:

machine_a$ ssh -R 8088:machine_a:8088 machine_b -N &

На машине B я могу убедиться, что туннель действительно открыт:

machine_b$ curl localhost:8088 "hello from machine_a"

Как мне заставить machine_b прослушивать HTTP-трафик на 8089 и маршрутизировать /pipe/ что-либо на этот локально доступный порт 8088, который, в свою очередь, является удаленным портом для HTTP-сервера на machine_a?

(Также я установил фиктивный сервер на machine_b:8089 и убедился, что он открыт.

2 ответа

Решение

С socat это служит моим целям:

machine_b$ socat TCP-LISTEN:8089,su=nobody,fork,reuseaddr TCP-CONNECT:127.0.0.1:8088

Это говорит socat прослушивать TCP-порт 8889 и подключать его к локальному 8088. Он работает как nobody пользователь, для лучшей безопасности. Параметр fork означает, что он будет пересматривать входящий порт, чтобы он не блокировался.

вылезая из моей машины:

my_machine$ curl machine_b:8089 "hello from machine_a"

nc -l 8089 | nc localhost 8088
Другие вопросы по тегам