Як користуватися ssh через http або https?


42

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

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

Я побачив інструмент під назвою corkscrew. чи допомогло б це?

opensshdі httpdзапустіть на домашньому сервері. Для чого ще потрібна конфігурація?


1
поставте свій sshd вдома для прослуховування на порт 443, але вам слід відключити порт 443 в домашньому httpd.
талієзин

Я не можу зовсім це. Мені потрібні httpd (s) і для git push. тому я повинен слухати httpd 443.
MMM

спробуйте httptunnel - yum install httptunnel http://www.nocrew.org/software/httptunnel.html , або як ви згадували у своєму запитанні: штопор.
taliezin

Так чи інакше, sshd слухав би 22, а httpd до 80/443, а httptunnel або штопор пересилали б трафік, який httpd отримує в sshd?
МММ

Так. Не потрібно змінювати порти ваших служб.
taliezin

Відповіді:


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/, щоб ознайомитись із навчальним посібником про те, як це робити з прокситуннелем .


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

@AK_ Оскільки, хоча брандмауер може відрізнити TLS від SSH, це додатковий етап конфігурації і витрачає більше на продуктивність, бо не має реальної вигоди, коли мова йде про вихідні з'єднання (оскільки все-таки все може бути тунельовано в TLS).
Жиль "ТАК - перестань бути злим"

@Gilles, Чи існують навіть проксі-сервери, що блокують HTTPS, але вони дозволяють HTTP CONNECT HTTPS?
Печер'є

1
@Pacerier Багато з них. Справа не в тому, що проксі блокує HTTPS - проксі не блокує з'єднання, які обходять проксі - це те, що прямі з'єднання заблоковані, але проксі дозволяє ПІДКЛЮЧИТИ будь-який трафік за умови, що він переходить на порт 443. Немає реального способу фільтрації HTTPS все одно , не маючи кореня довіри введення та переписування сертифікатів, що дуже погана ідея.
Жил "ТАК - перестань бути злим"

Зауважте, що ви можете також використовувати netcat-openbsd замість штопор у проксі-команді:ProxyCommand nc -X connect -x __proxy_IP__:__port__ %h %p
Пол Руджо,


1

Ви можете використовувати sslh, якщо хочете запустити BOTH сервер HTTPS та SSHd-сервер на тому ж порту 443.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.