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

20

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

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

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

Джокердино
источник
2
man sshпоказывает порт: хост: хост. Так попробуй ssh 80:server.comили около того.
MarkovCh1
Это для настройки туннеля через -L или -R. Так что вам понадобится еще одна коробка, чтобы пройти через нее.
Цезий
1
См. Также unix.stackexchange.com/a/190612/4319
imz - Иван Захарящев

Ответы:

19

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

Если у вас есть контроль над сервером, и вы все еще хотите попробовать его, вы можете изменить порт 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, скорее всего, они будут рассматривать любые крайние попытки обойти это довольно негативно ...

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

Оли
источник
7
+1 к обсуждению ваших потребностей с вашим отделом ИТ. Во многих средах, включая шахту, этот вид деятельности будет основанием для прекращения.
Пантера
1
Кроме того, если он собирается заставить сервер ssh прослушивать другой порт, он может заставить его слушать оба порта 22 и 80, имея две Portстроки, по одной для каждого порта в /etc/ssh/sshd_configфайле.
Azendale
Я не буду составлять список (список длинный, и обсуждение некоторых из его пунктов может стать очень политическим быстро), но этот вопрос охватывает многие ситуации, помимо вопроса о сотруднике, стремящемся обойти политику компании, которая лояльно реализуется собственный ИТ-отдел компании. Я полностью для людей, обсуждающих свои потребности в работе с ИТ, но это не всегда применимо, и иногда ИТ-отделы даже отвечают: «Это хорошо, но мы ничего не меняем, чтобы удовлетворить вас». Отдельно, вполне вероятно, что порт 22 заблокирован VPN, поэтому я думаю, что стоит попробовать.
Элия ​​Каган
@Panther Тогда некоторые люди будут еще счастливее покончить с этим корпоративным режимом.
NeverEndingQueue
15

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 on mygateway(или, если он не работает под Ubuntu, убедитесь, что у него есть ncкоманда). Поместите это в свой ~/.ssh/config:

Host mytarget
ProxyCommand ssh mygateway nc %h %p

SSH к Apache

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

Жиль "ТАК - перестать быть злым
источник
Вы также можете использовать nc вместо штопора для https, да? stackoverflow.com/a/15577758/32453
rogerdpack
3

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

http://benctechnicalblog.blogspot.hu/2011/03/ssh-over-connect-over-port-80.html

Вы можете использовать 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

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

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

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

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

ОБНОВИТЬ:

Или просто, просто используйте веб-приложение, которое дает вам SSH через браузер. http://en.wikipedia.org/wiki/Web-based_SSH

Calmarius
источник
2

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

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

Взгляните на это онлайн на www.torproject.org .

Robbietjuh
источник
2

Извините, я должен играть в адвоката дьяволов.

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

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

Solarfinder
источник
2
Не всегда возможно поговорить с сетевыми администраторами, а сетевые администраторы не всегда разумны.
Джереми Бича
Например, если вы сидите в кафе, подключены к WiFi, но администратор ограничил доступ (и вам все равно нужно подключиться прямо сейчас).
old-ufo