https://en.wikipedia.org/wiki/Web-based_SSH
https://github.com/nobonobo/ssh-p2p - ровно то что нужно
https://github.com/mxseba/rtc-ssh
https://github.com/ryscheng/uproxy-networking - хз пока что
https://github.com/luizluca/bridge
На всякий случай утащил к себе: bridge-master.zip
Данная утилита (не моя) - скорее просто proof-of-concept. Она работает, но ей много чего не хватает (например - аутентификации).
Протестировал на чистом контейнере Ubuntu 19.10.
Продвинутая версия с BasicAuth (нашел среди форков) - https://github.com/puochan/bridge
Добавлен HTTPS - https://github.com/vadimkim/bridge
Вот мой вариант - https://github.com/MikeQ123/bridge.git. Это форк от puochan с обработкой перенаправлений при установке соединения и добавлением к запросам cookie OpenDNS. Нужно бы добавить ssl, хотя, если внутри всегда ssh, то ssl не нужен.
Сервер может быть настроен где угодно (не обязательно внутри сети, куда нам нужно попасть).
apt-get install ruby git git clone https://github.com/MikeQ123/bridge.git sudo cp ./bridge/http_bridge /usr/bin/
Запускаем сервер
sudo http_bridge server 80 /some-path user:password
Сервер будет принимать подключения на порту 80, URN /some-path и аутентифировать пользователя по логину user и парою password.
Для автоматического запуска сделаем юнит сервиса:
[Unit] Description=Setup a secure tunnel to remote server After=network.target [Service] ExecStart=/usr/bin/http_bridge server 80 /some-path user:password RestartSec=10 Restart=always [Install] WantedBy=multi-user.target
Уведомляем systemd, включаем сервис и запускаем его:
systemctl daemon-reload systemctl enable http-bridge-server.service systemctl start http-bridge-server.service
apt-get install ruby git git clone https://github.com/MikeQ123/bridge.git sudo cp ./bridge/http_bridge /usr/bin/
Запускаем клиент:
sudo bash -c 'http_proxy=http://proxy-server:3128 http_bridge client 222 http://tunnel.server/some-path some.ssh-server.com 22 user:password'
Всё. Теперь на клиентской машине на порту 222 у нас доступен порт 22 хоста some.ssh-server.com.
Для автоматического запуска клиента при старте сессии ssh нужно добавить в ~/.ssh/config такие директивы:
Host mysshserver.com ProxyCommand /usr/bin/http_bridge client - http://tunnel.server/some-path %h %p user:password
или в случае с proxy-сервером:
Host mysshserver.com ProxyCommand bash -c 'http_proxy=http://proxy.server:3128 /usr/bin/http_bridge client - http://tunnel.server/some-path %h %p user:password'
И теперь при выполнении:
ssh user@mysshserver.com
автоматически будет запускаться bridge (повышение привилегий в этом случае не нужно).
Для автоматического запуска клиента сделаем юнит сервиса:
[Unit] Description=HTTP Tunnel Client Service After=network.target [Service] Environment="http_proxy=http://proxy_server:3128" ExecStart=/usr/bin/http_bridge client 222 http://tunnel.server/some-path some.ssh-server.com 22 user:password RestartSec=10 Restart=always [Install] WantedBy=multi-user.target
Уведомляем systemd, включаем сервис и запускаем его:
sudo systemctl daemon-reload sudo systemctl enable http-bridge-client.service sudo systemctl start http-bridge-client.service
https://github.com/larsbrinkhoff/httptunnel
Можно найти в репозиториях многих дистрибутивов.
Пишут, что испоьзует чистые PUT и GET запросы, то есть должен проходить большинство PROXY.