Czy jest możliwe połączenie SSH przez port 80?

20

Jestem za zaporą sieciową, która nie pozwala mi ssh przez domyślny port. Z tego powodu nie mogę wypychać żadnych gałęzi bzr do mojego repozytorium. Chciałbym wiedzieć, czy możliwe jest jakoś proxy ssh przez port 80, aby móc przepychać gałęzie.

Słyszałem, że korkociąg pozwala ci to zrobić, ale nie jestem pewien, jak to zrobić dokładnie.

Jeśli znasz jakikolwiek działający serwer proxy, który ci na to pozwala, proszę o tym wspomnieć.

jokerdino
źródło
2
man sshujawnia port: host: hostport. Więc spróbuj ssh 80:server.com.
MarkovCh1
To jest do ustawienia tunelu przez -L lub -R. Potrzebowałbyś więc innego pudła, żeby je tunelować.
Cesium
1
Zobacz także unix.stackexchange.com/a/190612/4319
imz - Ivan Zakharyaschev

Odpowiedzi:

19

Dobra zapora korporacyjna sprawdza ruch niezależnie od portu, więc zmiana portu może po prostu nie działać.

Jeśli masz kontrolę nad serwerem i nadal chcesz go wypróbować, możesz zmienić port sshd na port 80. Ostrzeżenie Jeśli masz coś innego uruchomionego na porcie 80 (na serwerze), to nie będzie działać i prawdopodobnie oznacza to, że całkowicie stracić dostęp SSH do serwera!

Musisz edytować /etc/ssh/sshd_configi zmienić Portna 80. Następnie uruchomić

sudo restart ssh

A następnie połącz:

ssh user@host -p80

Twoja ścieżka bzr wyglądałaby wtedy jak: bzr+ssh://host:80/path/


Inną metodą jest użycie WebDav. Powinno to całkowicie obejść problem zapory ogniowej, ponieważ wszystko dzieje się na porcie 80, ale będzie wymagało uruchomienia Apache i skonfigurowania szeregu rzeczy:

  1. Zainstaluj WebDav
  2. Przenieś swój oddział we właściwe miejsce
  3. Użyj wtyczki bzr-webdav, aby się połączyć

VPN może być opcją, ale jeśli sshzostanie zablokowany, spodziewam się, że zostanie również wykluczony.

Możesz po prostu chcieć porozmawiać z administratorami sieci. Musisz coś zrobić, a oni cię powstrzymają. Jeśli mają powód do blokowania ssh, prawdopodobnie zobaczą wszelkie ekstremalne próby obejścia go dość negatywnie ...

Krótko mówiąc, może być po prostu bezpieczniej z nimi rozmawiać.

Oli
źródło
7
+1 do omówienia Twoich potrzeb z działem IT. W wielu środowiskach, w tym moim, ten rodzaj działalności stanowiłby podstawę do wypowiedzenia.
Pantera
1
Ponadto, jeśli zamierza zmusić serwer ssh do nasłuchiwania na innym porcie, może sprawić, że nasłuchuje zarówno na porcie 22, jak i 80, posiadając dwie Portlinie, po jednej dla każdego portu w /etc/ssh/sshd_configpliku.
Azendale
Uniknę sporządzania listy (lista jest długa, a dyskusja niektórych pozycji na niej może bardzo szybko nabrać charakteru politycznego), ale to pytanie obejmuje wiele sytuacji poza sytuacją pracownika, który chce obejść politykę firmy, która jest lojalnie wdrażana przez własny dział IT firmy. Jestem za ludźmi, którzy dyskutują o potrzebach pracy z IT, ale nie zawsze ma to zastosowanie, a czasami działy IT odpowiadają nawet: „W porządku, ale nic nie zmieniamy, aby cię dostosować”. Osobno jest całkiem prawdopodobne, że port 22 jest zablokowany przez VPN, więc nie, więc myślę, że warto spróbować.
Eliah Kagan
@Panther Wówczas niektórzy ludzie byliby jeszcze bardziej zadowoleni z zakończenia reżimu korporacyjnego.
NeverEndingQueue,
15

SSH przez proxy

Jeśli zapora na to pozwala, możesz uruchomić ssh na dowolnym porcie, ale wymaga to, aby serwer ssh nasłuchiwał na tym porcie. Port 80 prawdopodobnie nie zadziała, ponieważ większość miejsc z zaporami ogniowymi analizuje ruch na tym porcie i blokuje wszystko, co nie jest HTTP. Ale port 443, który zwykle jest portem HTTPS, często działa, ponieważ SSH i HTTPS wyglądają bardzo podobnie do oprogramowania filtrującego, więc sesja SSH będzie wyglądać jak sesja HTTPS. (Możliwe jest rozróżnienie HTTPS i SSH, więc to nie zadziała, jeśli zapora jest wystarczająco zaawansowana).

Jeśli masz kontrolę nad serwerem, pozwól mu nasłuchiwać na porcie 443 oprócz 22 (normalny port ssh). Możesz skonfigurować port w /etc/ssh/sshd_config: dodaj linię

Port 443

oprócz tego, Port 22które powinny już tam być. Zauważ, że zakłada to, że serwer ssh nie jest również serwerem HTTPS. Jeśli tak, musisz znaleźć inny port, z którego zapora pozwala korzystać, lub znaleźć inny serwer ssh (patrz przekazywanie poniżej).

Jeśli nie musisz ustawiać serwera proxy w przeglądarce, możesz spróbować połączyć się bezpośrednio:

ssh -p 443 myserver.example.com

Jeśli to zadziała, zdefiniuj alias w swoim ~/.ssh/config:

Host myserver
HostName myserver.example.com
Port 443

Jeśli musisz ustawić serwer proxy w przeglądarce, powiedz ssh, aby przeszedł przez serwer proxy. Zainstaluj korkociąg . Zdefiniuj taki alias w swoim miejscu ~/.ssh/config, gdzie http://proxy.acme.com:3128/jest serwer proxy, którego używasz do HTTPS na zewnątrz (zastąp go właściwą nazwą hosta i portem):

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

SSH przez SSH

Jeśli możesz dostać się na maszynę zewnętrzną za pomocą jednej z powyższych technik, ale nie na maszynie, którą jesteś zainteresowany, użyj tego, aby przekazać połączenie. Zakładając, że możesz ssh na maszynie o nazwie mygatewayi chcesz połączyć się z serwerem SSH mytarget, zainstaluj netcat-openbsd na mygateway(lub, jeśli nie jest uruchomiony Ubuntu, upewnij się, że ma ncpolecenie). Umieść to w ~/.ssh/config:

Host mytarget
ProxyCommand ssh mygateway nc %h %p

SSH do Apache

Jeśli host, z którym chcesz się połączyć, już działa na serwerze Apache i nasłuchuje na porcie 443 i masz kontrolę nad tym hostem, możesz skonfigurować ten serwer Apache, aby akceptował połączenia SSH i przekazywał je dalej. Zobacz Tunelowanie SSH przez HTTP (S) .

Gilles „SO- przestań być zły”
źródło
możesz także użyć nc zamiast korkociągu do https, tak? stackoverflow.com/a/15577758/32453
rogerdpack
3

Właśnie przeczytałem tutaj wyrafinowane rozwiązanie:

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

Możesz SSH home na porcie 80, nawet jeśli na twoim serwerze domowym działa serwer WWW również na porcie 80.

Zakładając, że serwer macierzysty uruchamia Apache. Pomysł obejmuje włączenie mod_proxy na serwerze, a następnie ograniczenie go do łączenia się z 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>

Teraz możesz wykonać żądanie połączenia HTTP z hostem lokalnym, a serwer WWW utworzy dla ciebie tunel, musisz tylko upewnić się, że cały ruch przechodzi przez serwer proxy:

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

Upewnij się, że połączenia localhost z SSH nie są uprzywilejowane (aby uniknąć wpuszczania obcych ...)

Powinno to działać, jeśli jesteś za routerem, który pozwala tylko na wyjście 80.

Jeśli jesteś za serwerem proxy (więc musisz ustawić serwer proxy w przeglądarce, aby uzyskać dostęp do Internetu), musisz najpierw założyć tunel do własnego hosta, a następnie wydać kolejne żądanie CONNECT w tym tunelu, aby dostać się do hosta. Jest to bardziej wyrafinowane, w tym celu musisz użyć 2 netcats.

Wszystko jest możliwe, ale rób to na własne ryzyko ...

AKTUALIZACJA:

Lub po prostu skorzystaj z aplikacji internetowej, która daje SSH za pośrednictwem przeglądarki. http://en.wikipedia.org/wiki/Web-based_SSH

Calmarius
źródło
2

Jeśli nie masz żadnej kontroli nad serwerem, aby zmienić port SSH na port 80 lub jeśli nie możesz SSH przez port 80, ponieważ zapora blokuje ci przesyłanie takich danych przez port 80, możesz wypróbować TOR.

TOR to ogromna sieć. Twój komputer łączy się z innym komputerem gdzieś na świecie, który łączy się z innym komputerem, dopóki nie osiągnie serwera SSH. Wszystko to jest przyjazne dla zapory ogniowej, dzieje się to na porcie 443 (którego twoja firma nie blokuje, albo… no cóż, to nie jest takie mądre). Jest to dosłownie ogromny serwer proxy lub VPN i jest również szyfrowany. W ten sposób możesz uzyskać dostęp do dowolnego hosta na dowolnym porcie (również SSH serwera na porcie 22).

Spójrz na to online na www.torproject.org .

Robbietjuh
źródło
2

Przepraszam, muszę grać w adwokata diabłów.

Wiem, że najprawdopodobniej jest ku temu powód, jednak dlaczego administrator sieci / zapory nie otworzy określonego portu, którego szukasz? Z punktu widzenia bezpieczeństwa chcesz zaryzykować, że inspekcja internetowa coś przegapi? Jeśli jest skonfigurowany do ominięcia portu 80 dla standardowego ruchu, a ty narażasz się na niebezpieczeństwo.

Zgadzam się z kilkoma powyższymi sugestiami, w których punkt po punkcie VPN może być bezpieczniejszą opcją. Ponownie, z punktu widzenia bezpieczeństwa, chciałbym poznać powód, dla którego tak naprawdę omijasz zasady bezpieczeństwa i dlaczego nie możesz umieścić swojego serwera w dmz lub w celu uzyskania dostępu. Tylko ja. Powodzenia.

Solarfinder
źródło
2
Nie zawsze można rozmawiać z administratorami sieci, a administratorzy sieci nie zawsze są rozsądni.
Jeremy Bicha
Na przykład, jeśli siedzisz w kawiarni, masz połączenie z Wi-Fi, ale dostęp administratora jest ograniczony (i nadal musisz się połączyć).
old-ufo