Возможно ли SSH через порт 80?

19

Я за сетевым брандмауэром, который не позволяет мне ssh через порт по умолчанию. Из-за этого я не могу выталкивать ветки bzr в мой репозиторий. Я хотел бы знать, можно ли каким-либо образом проксировать ssh через порт 80, чтобы я мог нажимать ветви.

Я слышал, что штопор позволяет вам это делать, но я не уверен, как это сделать.

Если вы знаете какой-либо рабочий прокси-сервер, который позволяет вам это сделать, укажите их.

    
задан jokerdino 24.02.2012 в 04:44
источник

5 ответов

16

Хороший корпоративный брандмауэр будет проверять трафик независимо от порта, поэтому изменение порта просто может не работать.

Если у вас есть контроль над сервером и вы хотите его попробовать, вы можете изменить порт sshd на порт 80. Предупреждение Если у вас есть что-то еще на порту 80 (на сервере) это не сработает и, скорее всего, означает, что вы полностью потеряете SSH-доступ к серверу!

Вам нужно будет отредактировать /etc/ssh/sshd_config и изменить Port на 80 . Затем запустите

sudo restart ssh

И затем подключитесь:

ssh user@host -p80

Ваш путь bzr будет выглядеть примерно так: bzr+ssh://host:80/path/

Другой метод - использовать WebDav. Это должно полностью обойти проблему брандмауэра, потому что все это происходит на порту 80, но вам потребуется запустить Apache и установить несколько вещей:

  1. Установите WebDav
  2. Переместите ветку в нужное место.
  3. Используйте плагин bzr-webdav для подключения

VPN может быть вариантом, но если ssh заблокировано, я ожидаю, что это тоже будет исключено.

Возможно, вам просто нужно поговорить с администраторами сети. Вам нужно что-то сделать, и они останавливают вас. Если у них есть причина блокировки ssh , скорее всего, они будут рассматривать любые крайние попытки обходить его довольно негативно ...

Короче говоря, было бы безопаснее говорить с ними.

    
ответ дан Oli 24.02.2012 в 14:05
источник
14

SSH через прокси

Если брандмауэр позволяет вам, вы можете запустить ssh на любой порт, но для этого требуется, чтобы ssh-сервер прослушивал этот порт. Порт 80 вряд ли будет работать, потому что большинство мест, которые имеют брандмауэры, анализируют трафик на этом порту и блокируют все, что не является HTTP. Но порт 443, который обычно является портом HTTPS, часто работает, потому что SSH и HTTPS очень похожи друг на друга на фильтрацию программного обеспечения, поэтому ваш сеанс SSH будет выглядеть как сеанс HTTPS. (Можно отличить HTTPS и SSH, поэтому это не сработает, если брандмауэр достаточно изощрен.)

Если у вас есть контроль над сервером, заставьте его прослушивать порт 443 в дополнение к 22 (обычный порт ssh). Вы можете настроить порт в /etc/ssh/sshd_config : добавить строку

Port 443

в дополнение к Port 22 , которое должно быть уже там. Обратите внимание, что это предполагает, что ssh-сервер не является также сервером HTTPS. Если это так, вам нужно найти другой порт, который брандмауэр позволяет вам использовать или найти другой сервер ssh (см. Переадресацию ниже).

Если вам не нужно устанавливать веб-прокси в своем веб-браузере, вы можете попробовать напрямую подключиться:

ssh -p 443 myserver.example.com

Если это работает, определите псевдоним в ~/.ssh/config :

Host myserver
HostName myserver.example.com
Port 443

Если вам нужно установить веб-прокси в своем веб-браузере, сообщите ssh, чтобы он прошел через прокси-сервер. Установите штопор . Определите псевдоним, подобный этому, в ~/.ssh/config , где http://proxy.acme.com:3128/ - это прокси-сервер, который вы используете для HTTPS для внешней (замените соответствующим именем хоста и портом):

Host myserver
HostName myserver.example.com
Port 443
ProxyCommand /usr/bin/corkscrew proxy.acme.com 3128 %h %p

SSH через SSH

Если вы можете добраться до какой-либо внешней машины по одному из вышеперечисленных методов, но не к интересующей вас машине, используйте это для пересылки соединения. Предполагая, что вы можете ssh на машину с именем mygateway , и вы хотите добраться до SSH-сервера на mytarget , установите netcat-openbsd на mygateway (или, если он не работает Ubuntu, убедитесь, что он имеет команду nc ). Поместите это в свой ~/.ssh/config :

Host mytarget
ProxyCommand ssh mygateway nc %h %p

SSH для Apache

Если хост, к которому вы хотите подключиться, уже работает Apache и прослушивает порт 443, и у вас есть контроль над этим хостом, вы можете настроить этот Apache для приема SSH-соединений и пересылки их. См. Туннелирование SSH через HTTP (S) .

    
ответ дан Gilles 27.02.2012 в 02:38
2

Если у вас нет контроля над сервером, чтобы изменить порт SSH на порт 80 или если вы не можете SSH через порт 80, потому что брандмауэр блокирует передачу данных через порт 80, вы можете попробовать TOR.

TOR - огромная сеть. Ваш компьютер подключается к другому компьютеру где-то в мире, этот компьютер подключается к другому, пока не достигнет SSH-сервера. Это все брандмауэр-дружелюбный, происходит на порту 443 (который ваша компания не блокирует, иначе .. ну, это не так уж и умно). Это буквально просто огромный прокси-сервер или VPN, и он тоже зашифрован. Таким образом, вы можете получить доступ к любому хосту на любом порту (также SSH сервера на порту 22).

Взгляните на него по адресу www.torproject.org .     

ответ дан Robbietjuh 24.02.2012 в 15:29
2

Прошу прощения, я должен играть адвоката дьявола.

Я знаю, что, скорее всего, причина для этого, однако, почему ваш администратор сети / брандмауэра не откроет конкретный порт, который вы ищете? С точки зрения безопасности, вы хотите, чтобы веб-инспектор пропустил что-нибудь? Если он настроен на обходной порт 80 для трафика std, и вы наносите себе вред.

Я согласен с несколькими предложениями выше, где в качестве точки для точки vpn может быть более безопасный вариант. Опять же, с точки зрения безопасности, мне было бы интересно узнать причину, по которой вы действительно обходите политики безопасности, и почему вы не можете поставить ваш сервер в dmz или магистраль для доступа. Только я. Удачи.

    
ответ дан Solarfinder 22.10.2012 в 21:33
2

Я только что прочитал сложное решение:

Ссылка

Вы можете использовать SSH на порту 80, даже если ваш домашний сервер также запускает веб-сервер на порту 80.

Предполагая, что домашний сервер запускает Apache. Идея включает в себя создание mod_proxy на вашем сервере, а затем ограничение его на подключение к localhost (proxy.conf):

<IfModule mod_proxy.c>
         ProxyRequests On
        <Proxy *>
                AddDefaultCharset off
                Order deny,allow
                Deny from all
        </Proxy>
        <Proxy localhost>
          Allow from all
        </Proxy>
        AllowCONNECT 22
        ProxyVia On
</IfModule>

Теперь вы можете выполнить запрос HTTP-подключения к локальному хосту, и веб-сервер установит для вас туннель, вам нужно только убедиться, что весь трафик проходит через ваш прокси:

ssh -o 'ProxyCommand nc -X connect -x myhost.example.com:80 localhost 22' myhost.example.com

Убедитесь, что соединения localhost с SSH не являются привилегированными (чтобы не допускать незнакомцев в ...)

Это должно работать, если вы находитесь за маршрутизатором, который позволяет вывести только порт 80.

Если вы находитесь за прокси-сервером (поэтому вам нужно установить прокси-сервер в своем браузере, чтобы получить Интернет), вам нужно сначала установить туннель на свой собственный хост, а затем выпустить еще один запрос CONNECT в этом туннеле, чтобы добраться до вашего хоста , Это сложнее, вам нужно использовать для этого 2 netcats.

Все возможно, но делайте это ради собственного риска ...

UPDATE:

Или просто просто используйте веб-приложение, которое дает вам SSH через браузер. Ссылка

    
ответ дан Calmarius 29.04.2013 в 18:49