У меня есть не корневой сервер с общедоступным IP-адресом, который принимает только HTTP-запросы (не только ограничение порта), и два локальных компьютера с только частным IP-адресом в разных сетях. Я хотел бы установить SSH-соединение между этими локальными компьютерами, возможно, через сервер.

Есть ли способ сделать это без переписывания SSH клиент / сервер?

3 ответа3

0

Ни за что, если вы не настроите дополнительный сервис на сервере.

Независимо от брандмауэра, основная проблема заключается в том, что HTTP закрывает соединение каждый раз после выполнения запроса, в то время как SSH требует постоянно открытого соединения.

0

Мне удалось сделать это даже без HTTP-сервера (в строгом смысле):

все, что я использовал, было node.js на обеих клиентских сторонах (один ssh-клиент, один ssh-сервер), а также firebase для хранения буферов (преобразованных в строки), прочитанных из потока TCP, и в соответствии с общей инструкцией из ответа / комментариев @ Putnik, ( имея в виду использование опции allowHalfOpen ), программа работает с небольшой задержкой. Графически соединение выглядит так:

client1 (ssh клиент)<=> localhost1 (tcp, fake-ssh сервер)

client2 (ssh-сервер)<=> localhost2 (tcp, поддельные ssh-клиенты)

localhost1 <=> firebase(или настоящий HTTP-сервер)<=> localhost2

Обратите внимание, что от локальных хостов до firebase/server можно кодировать / декодировать буферы по своему усмотрению - если они представляют собой пару преобразований без потерь. Поэтому ссылка на другой вопрос в ответе @ RedGrittyBrick (с использованием HTTP CONNECT) также должна работать при условии, что на этом сервере достаточно привилегий, и, возможно, это может быть быстрее.

Конечно, в коде есть много вещей, которые можно улучшить, но я считаю, что с точки зрения безопасности это не должно быть менее безопасно, чем прямое соединение с использованием openSSH. Пожалуйста, поправьте меня, если я ошибаюсь.

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