1

Я ищу какое-то программное обеспечение, которое может выполнять удаленную переадресацию соединений через сокеты по каналу в стиле TTY. У меня есть две машины, A и B. У меня есть права администратора на A, но не на B, но на компьютере BI я могу запускать произвольное серверное программное обеспечение, которое не требует администратора. Машина A не имеет общедоступного IP-адреса, но машина B имеет. Я могу установить исходящее соединение с компьютера A на компьютер B и передать по нему произвольные данные, но мне нужно некоторое программное обеспечение, которое я могу запустить на компьютере B, которое будет принимать входящее соединение, отправлять данные из этого соединения в процесс, выполняющийся на машине A, который затем инициирует новое соединение с сервером, работающим на машине A.

Я, к сожалению, не могу использовать ssh для этой цели, так как он был настроен администратором машины B так, чтобы не разрешать пересылку. В противном случае запуск ssh -R 4567:localhost:1234 machineb с машины A достиг бы того, что я ищу.

Кто-нибудь знает другой способ сделать это? Для справки: машина A работает под управлением Ubuntu Linux, а машина B работает под управлением OpenBSD, хотя я бы предпочел решение, переносимое во всех вариантах Unix.

1 ответ1

1

Вы можете использовать socat, чтобы сделать работу. Вам нужен socat установленный на машине A, и nc (netcat) на машине B (socat также будет работать). Ниже приведен пример того, как обрабатывать одно TCP-соединение (вы можете прочитать документацию socat , чтобы узнать, как обрабатывать больше и настроить поведение).

Вы должны запустить на машине A:

  • Служба, которую вы хотите предоставить компьютеру B, скажем, веб-серверу на порту 8000 (вы можете проверить его, запустив python3 -m http.server или python2 -m SimpleHTTPServer в любом каталоге, который вы хотите открыть для файлов);
  • socat для перенаправления между STDIO и SSH-соединением с B. Это SSH-соединение с B будет запускать nc прослушивания определенного порта.

Итак, запустите на одном терминальном сеансе на машине A:

python3 -m http.server

И в другом терминальном сеансе на машине A:

socat EXEC:'ssh user@machineb "nc -l -p 8888"' TCP4:localhost:8000

Если socat также доступен на машине B, вы можете заменить на него nc :

socat EXEC:'ssh user@machineb "socat STDIO TCP-LISTEN:8888,reuseaddr"' TCP4:localhost:8000

Объяснение концепции: socat перенаправит любой стандартный ввод / вывод команды ssh user@machineb "socat STDIO TCP-LISTEN:8888,reuseaddr" на подключение клиента TCP на localhost:8000 (TCP4:localhost:8000). Команда запустит SSH-соединение с машиной B и запустит там socat , который перенаправит все, что локально подключается к порту 8888 на машине B (TCP-LISTEN:8888,reuseaddr), в stdin / stdout (STDIO).

Да, сокат потрясающий!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .