https://en.wikipedia.org/wiki/Web-based_SSH
С помощью WebRTC
https://github.com/nobonobo/ssh-p2p - ровно то что нужно
https://github.com/mxseba/rtc-ssh
https://github.com/ryscheng/uproxy-networking - хз пока что
с использованием метода CONNECT
Без использования метода CONNECT (только PUT и GET)
bridge на ruby
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 не нужен.
bridge - сервер
Сервер может быть настроен где угодно (не обязательно внутри сети, куда нам нужно попасть).
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.
/etc/systemd/system/http-bridge-server.service
Для автоматического запуска сделаем юнит сервиса:
[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
bridge - Клиент
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 (повышение привилегий в этом случае не нужно).
/etc/systemd/system/http-bridge-client.service
Для автоматического запуска клиента сделаем юнит сервиса:
[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
httptunnel
https://github.com/larsbrinkhoff/httptunnel
Можно найти в репозиториях многих дистрибутивов.
Пишут, что испоьзует чистые PUT и GET запросы, то есть должен проходить большинство PROXY.
Discussion
https://github.com/jpillora/chisel