Ist es möglich, über Port 80 SSH zu betreiben?

20

Ich stecke hinter einer Netzwerk-Firewall, die es mir nicht erlaubt, über den Standard-Port zu sshen. Aus diesem Grund kann ich keine bzr-Zweige in mein Repository verschieben. Ich möchte wissen, ob es möglich ist, den SSH über Port 80 zu proxyen, damit ich die Zweige verschieben kann.

Ich habe gehört, dass Sie das mit dem Korkenzieher machen können, aber ich bin mir nicht sicher, wie ich das genau machen soll.

Wenn Sie einen funktionierenden Proxy-Server kennen, auf dem Sie dies tun können, erwähnen Sie diese bitte.

jokerdino
quelle
2
man sshdeckt port: host: hostport auf. Also versuchen Sie es ssh 80:server.comoder so.
MarkovCh1
Das ist für den Aufbau eines Tunnels über -L oder -R. Sie benötigen also eine weitere Box, um sie durchzutunneln.
Caesium
1
Siehe auch unix.stackexchange.com/a/190612/4319
imz - Ivan Zakharyaschev

Antworten:

19

Eine gute Unternehmensfirewall überprüft den Datenverkehr unabhängig vom Port, sodass ein Portwechsel möglicherweise nicht funktioniert.

Wenn Sie die Kontrolle über den Server haben und es dennoch versuchen möchten, können Sie den sshd-Port in Port 80 ändern. Warnung Wenn auf Port 80 (auf dem Server) etwas anderes ausgeführt wird, funktioniert dies nicht und bedeutet wahrscheinlich, dass Sie vollständig sind SSH-Zugriff auf den Server verlieren!

Sie werden zu bearbeiten müssen /etc/ssh/sshd_configund ändern Portzu 80. Dann renne

sudo restart ssh

Und dann verbinden:

ssh user@host -p80

Dein bzr Pfad würde dann ungefähr so ​​aussehen: bzr+ssh://host:80/path/


Eine andere Methode ist die Verwendung von WebDav. Dies sollte das Firewall-Problem vollständig umgehen, da dies alles auf Port 80 geschieht, Sie jedoch Apache ausführen und eine Reihe von Dingen einrichten müssen:

  1. Holen Sie sich WebDav installiert
  2. Bewegen Sie Ihren Zweig an den richtigen Ort
  3. Verwenden Sie das bzr-webdav- Plugin, um eine Verbindung herzustellen

Ein VPN könnte eine Option sein, aber wenn sshes gesperrt ist, würde ich erwarten, dass dies ebenfalls ausgeschlossen wird.

Vielleicht möchten Sie sich einfach mit Ihren Netzwerkadministratoren unterhalten. Du musst etwas tun und sie halten dich auf. Wenn sie einen Grund zum Blockieren haben ssh, werden sie extreme Versuche, dies zu umgehen, wahrscheinlich eher negativ sehen ...

Kurz gesagt, es könnte sicherer sein, mit ihnen zu sprechen.

Oli
quelle
7
+1, um Ihre Bedürfnisse mit Ihrer IT-Abteilung zu besprechen. In vielen Umgebungen, einschließlich meiner, wäre diese Art von Aktivität ein Grund zur Beendigung.
Panther
1
Wenn der SSH-Server einen anderen Port abhören soll, kann er auch dafür sorgen, dass er sowohl Port 22 als auch 80 abhört, indem er zwei PortLeitungen hat, eine für jeden Port in der /etc/ssh/sshd_configDatei.
Azendale
Ich werde es vermeiden, eine Liste zu erstellen (die Liste ist lang und die Diskussion über einige der darin enthaltenen Punkte kann sehr schnell politisch werden), aber diese Frage deckt viele Situationen ab, außer der eines Mitarbeiters, der versucht, eine Unternehmensrichtlinie zu umgehen, die von loyal umgesetzt wird die firmeneigene IT-Abteilung. Ich bin alles für Leute, die ihre Arbeitsanforderungen mit der IT besprechen, aber das trifft nicht immer zu, und manchmal antworten die IT-Abteilungen sogar mit: "Es ist in Ordnung, aber wir ändern nichts, um Sie zu unterstützen." Unabhängig davon ist es durchaus plausibel, dass Port 22 nicht durch VPNs blockiert wird. Ich denke, das ist einen Versuch wert.
Eliah Kagan
@Panther Dann wären manche Menschen sogar noch glücklicher, dieses Unternehmensregime zu beenden.
NeverEndingQueue
15

SSH über den Proxy

Wenn die Firewall dies zulässt, können Sie ssh an jedem beliebigen Port ausführen. Voraussetzung ist jedoch, dass der ssh-Server diesen Port überwacht. Es ist unwahrscheinlich, dass Port 80 funktioniert, da die meisten Orte mit Firewalls den Datenverkehr auf diesem Port analysieren und alles blockieren, was nicht HTTP ist. Port 443, normalerweise der HTTPS-Port, funktioniert jedoch häufig, da SSH und HTTPS für das Filtern von Software sehr ähnlich sind, sodass Ihre SSH-Sitzung wie eine HTTPS-Sitzung aussieht. (Es ist möglich, HTTPS und SSH zu unterscheiden. Dies funktioniert also nicht, wenn die Firewall hoch genug ist.)

Wenn Sie die Kontrolle über den Server haben, lassen Sie ihn zusätzlich zu 22 (dem normalen SSH-Port) den Port 443 überwachen. Sie können den Port folgendermaßen konfigurieren /etc/ssh/sshd_config: Fügen Sie eine Leitung hinzu

Port 443

dazu Port 22sollte das schon da sein. Beachten Sie, dass dies voraussetzt, dass der SSH-Server kein HTTPS-Server ist. Wenn dies der Fall ist, müssen Sie einen anderen Port suchen, den die Firewall verwendet, oder Sie müssen einen anderen SSH-Server suchen (siehe Weiterleitung unten).

Wenn Sie in Ihrem Webbrowser keinen Webproxy einrichten müssen, können Sie versuchen, eine direkte Verbindung herzustellen:

ssh -p 443 myserver.example.com

Wenn das funktioniert, definieren Sie einen Alias ​​in Ihrem ~/.ssh/config:

Host myserver
HostName myserver.example.com
Port 443

Wenn Sie in Ihrem Webbrowser einen Webproxy einrichten müssen, weisen Sie ssh an, den Proxy zu durchlaufen. Installieren Sie den Korkenzieher . Definieren Sie einen Alias ​​wie diesen in Ihrem ~/.ssh/config, wo http://proxy.acme.com:3128/ist der Proxy, den Sie für HTTPS verwenden, nach außen (ersetzen Sie ihn durch den richtigen Hostnamen und Port):

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

SSH über SSH

Wenn Sie mit einer der oben beschriebenen Methoden zu einem externen Computer gelangen können, jedoch nicht zu dem Computer, an dem Sie interessiert sind, leiten Sie eine Verbindung weiter. Angenommen, Sie können ssh auf einen Computer mit dem Namen mygatewayund Sie möchten den SSH-Server erreichen mytarget, installieren Sie netcat-openbsd auf mygateway(oder stellen Sie sicher, dass er den ncBefehl hat, wenn Ubuntu nicht ausgeführt wird ). Fügen Sie dies in Ihre ~/.ssh/config:

Host mytarget
ProxyCommand ssh mygateway nc %h %p

SSH zu Apache

Wenn der Host, zu dem Sie eine Verbindung herstellen möchten, bereits Apache ausführt und Port 443 überwacht und Sie die Kontrolle über diesen Host haben, können Sie diesen Apache so einrichten, dass er SSH-Verbindungen akzeptiert und weiterleitet. Siehe Tunneln von SSH über HTTP (S) .

Gilles 'SO - hör auf böse zu sein'
quelle
Sie können auch nc anstelle von corkscrew für https verwenden, ja? stackoverflow.com/a/15577758/32453
Rogerdpack
3

Ich habe gerade eine ausgefeilte Lösung hier gelesen:

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

Sie können SSH-Home auf Port 80 ausführen, auch wenn auf Ihrem Home-Server auch ein Webserver auf Port 80 ausgeführt wird.

Angenommen, der Heimserver führt Apache aus. Die Idee besteht darin, mod_proxy auf Ihrem Server zu aktivieren und dann die Verbindung zu localhost (proxy.conf) zu beschränken:

<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>

Jetzt können Sie eine HTTP-Verbindungsanforderung an den lokalen Host senden, und der Webserver richtet einen Tunnel für Sie ein. Sie müssen nur sicherstellen, dass der gesamte Datenverkehr über Ihren Proxy geleitet wird:

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

Stellen Sie sicher, dass localhost-Verbindungen zu SSH nicht privilegiert sind (um zu vermeiden, dass Fremde eintreten ...)

Dies sollte funktionieren, wenn Sie sich hinter einem Router befinden, der nur Port 80 zulässt.

Wenn Sie sich hinter einem Proxy befinden (Sie müssen also einen Proxy in Ihrem Browser einrichten, um das Internet zu erreichen), müssen Sie zunächst einen Tunnel zu Ihrem eigenen Host einrichten und anschließend eine weitere CONNECT-Anforderung innerhalb dieses Tunnels absetzen, um zu Ihrem Host zu gelangen. Dies ist anspruchsvoller, Sie müssen 2 Netcats dafür verwenden.

Alles ist möglich, aber auf eigenes Risiko ...

AKTUALISIEREN:

Oder verwenden Sie einfach eine Webanwendung, mit der Sie über einen Browser SSH erhalten. http://en.wikipedia.org/wiki/Web-based_SSH

Calmarius
quelle
2

Wenn Sie keine Kontrolle über den Server haben, um den SSH-Port in Port 80 zu ändern, oder wenn Sie kein SSH über Port 80 durchführen können, weil die Firewall die Übertragung solcher Daten über Port 80 blockiert, können Sie TOR versuchen.

TOR ist ein riesiges Netzwerk. Ihr Computer stellt eine Verbindung zu einem anderen Computer irgendwo auf der Welt her. Dieser Computer stellt eine Verbindung zu einem anderen Computer her, bis er den SSH-Server erreicht. Dies ist alles Firewall-freundlich, geschieht auf Port 443 (den Ihr Unternehmen nicht blockiert, oder ... nun, das ist nicht so klug von ihnen). Es ist buchstäblich nur ein riesiger Proxy oder VPN und es ist auch verschlüsselt. Auf diese Weise können Sie auf jeden Host an jedem Port zugreifen (auch auf SSH eines Servers an Port 22).

Schauen Sie es sich online unter www.torproject.org an .

Robbietjuh
quelle
2

Es tut mir leid, ich muss Devils Advocate spielen.

Ich weiß, dass es höchstwahrscheinlich einen Grund dafür gibt. Warum öffnet Ihr Netzwerk- / Firewall-Administrator jedoch nicht den bestimmten Port, nach dem Sie suchen? Möchten Sie aus Sicherheitsgründen die Chance nutzen, dass web-inspect nichts verpasst? Wenn es so konfiguriert ist, dass Port 80 für normalen Datenverkehr umgangen wird und Sie sich selbst in Gefahr bringen.

Ich stimme mit ein paar Vorschlägen oben überein, bei denen vpn von Punkt zu Punkt eine sicherere Option sein kann. Auch unter Sicherheitsaspekten würde mich interessieren, warum Sie Sicherheitsrichtlinien wirklich umgehen und warum Sie Ihren Server nicht entweder in ein DMZ- oder Backbone-System für den Zugriff einbinden können. Nur ich. Viel Glück.

Solarfinder
quelle
2
Es ist nicht immer möglich, mit den Netzwerkadministratoren zu sprechen, und die Netzwerkadministratoren sind nicht immer angemessen.
Jeremy Bicha
Zum Beispiel, wenn Sie in einem Café sitzen, mit WLAN verbunden sind, aber den Zugriff durch Administratoren beschränken (und Sie jetzt noch eine Verbindung herstellen müssen).
Old-UFO