Как использовать SSH через http или https?


43

У меня есть клиентский ноутбук linux fedora21 за корпоративным брандмауэром (который пропускает через порты http и https, но не через ssh 22), и у меня есть сервер linux fedora21 дома за моим собственным маршрутизатором. Просмотр с помощью https работает, когда я указываю публичный IP-адрес моего домашнего сервера (потому что я настроил свой домашний маршрутизатор)

Можно ли подключить ssh (удаленная оболочка) к моему домашнему серверу через порт http / s?

Я видел инструмент под названием corkscrew. это поможет?

opensshdи httpdзапустить на домашнем сервере. Что еще нужно будет настроить?


1
Поместите ваш sshd дома, чтобы прослушивать порт 443, но вы должны отключить порт 443 на своем домашнем httpd.
taliezin

Я не могу этого понять. Мне нужно httpd (s) для git также. поэтому мне нужно прослушать httpd на 443.
МММ

попробуйте httptunnel - yum установите httptunnel http://www.nocrew.org/software/httptunnel.html или, как вы упомянули в своем вопросе: corkscrew.
taliezin

В любом случае, sshd будет прослушивать 22, а httpd на 80/443, а httptunnel или штопор будет перенаправлять трафик, полученный httpd на sshd?
МММ

Да. Не нужно менять порты ваших услуг.
Талиезин

Ответы:


42

Что возможно, зависит от того, что позволяет брандмауэр.

Если межсетевой экран разрешает произвольный трафик через порт 443

Некоторые брандмауэры используют простой выход и разрешают все на порту 443. Если это так, самый простой способ получить доступ к вашему домашнему серверу - это заставить его прослушивать соединения SSH на порту 443. Если ваша машина напрямую подключена к Интернету, просто добавить Port 443в /etc/ssh/sshd_configили /etc/sshd_configчуть ниже линии , которая говорит Port 22. Если ваша машина находится за маршрутизатором / брандмауэром, который перенаправляет входящие соединения, сделайте так, чтобы она перенаправляла входящие соединения на порт 443 на порт 22 вашего сервера с чем-то вроде

iptables -t nat -I PREROUTING -p tcp -i wan0 --dport 443 -j DNAT --to-destination 10.1.2.3:22

где wan0- интерфейс WAN на вашем маршрутизаторе, а 10.1.2.3 - IP-адрес вашего сервера в вашей домашней сети.

Если вы хотите разрешить вашему домашнему серверу прослушивать как HTTPS-соединения, так и SSH-соединения через порт 443, это возможно - трафик SSH и HTTPS можно легко различить (в SSH сервер сначала говорит, а в HTTP и HTTPS - клиент первый). См. Http://blog.stalkr.net/2012/02/sshhttps-multiplexing-with-sshttp.html и http://wrouesnel.github.io/articles/Setting%20up%20sshttp/, чтобы узнать, как установить это с sshttp , а также иметь SSH на порт 80 или 443, в то время как веб-сервер (nginx) работает на этих портах

Если у вас есть веб-прокси, который позволяет CONNECT туннелирование

Некоторые брандмауэры блокируют все исходящие соединения, но позволяют просматривать веб-страницы через прокси-сервер, который позволяет методу HTTPCONNECT эффективно пробить дыру в брандмауэре. CONNECT метод может быть ограничен определенными портами, поэтому вам может потребоваться совместить это с прослушиванием на порту 443, как описано выше.

Чтобы заставить SSH проходить через прокси, вы можете использовать такой инструмент, как штопор . В вашей ~/.ssh/config, добавьте ProxyCommandстроку, как показано ниже, если ваш веб-прокси http://web-proxy.work.example.com:3128:

Host home
HostName mmm.dyndns.example.net
ProxyCommand corkscrew web-proxy.work.example.com 3128 %h %p

Обертывание SSH в HTTP (S)

Некоторые брандмауэры не допускают трафик SSH, даже через порт 443. Чтобы справиться с этим, вам нужно замаскировать или туннелировать SSH в то, что пропускает брандмауэр. См http://dag.wiee.rs/howto/ssh-http-tunneling/ для учебника по делать это с proxytunnel .


443 трюк сделал это! Я был удивлен, что это работает :) - любой взгляд сисадмина, почему это происходит с большинством брандмауэров?
AK_

@AK_ Поскольку брандмауэр может отличить TLS от SSH, он является дополнительным этапом настройки и требует дополнительных затрат производительности, что не дает никаких реальных преимуществ, когда речь идет об исходящих соединениях (поскольку в любом случае все может быть туннелировано в TLS).
Жиль "ТАК - перестань быть злым"

@ Жиль, есть ли прокси-серверы, которые блокируют HTTPS, но разрешают HTTP CONNECT HTTPS?
Pacerier

1
@Pacerier Многие из них. Дело не в том, что прокси блокирует HTTPS - прокси не блокирует соединения, которые обходят прокси, - это в том, что прямые соединения блокируются, но прокси позволяет CONNECT с любым трафиком при условии, что он подключен к порту 443. В любом случае, нет никакого реального способа фильтрации HTTPS Если не считать корень доверия и переписывание сертификатов, что очень плохая идея.
Жиль "ТАК - перестать быть злым"

Обратите внимание, что вы также можете использовать netcat-openbsd вместо штопора в прокси-команде:ProxyCommand nc -X connect -x __proxy_IP__:__port__ %h %p
Paul Rougieux,


1

Вы можете использовать sslh, если хотите запустить ОБА HTTPS-сервер и SSHd-сервер на одном и том же порту 443.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.