Мне удалось сделать это даже без 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. Пожалуйста, поправьте меня, если я ошибаюсь.