SSH über Proxy
im Parteibuch Lexikon, dem parteiischen Wiki mit wertenden Informationen in deutlicher Sprache
Inhaltsverzeichnis |
[bearbeiten] Problemstellung
Es gibt mehrere Einsatzszenarien, wo man eine SSH-Verbindung über einen HTTP(s)- oder SOCKS-Proxy aufbauen muss/kann. Hier zwei Beispiele:
- Man hat von den vielen schönen Möglichkeiten (z.B. SSH-Proxy oder SSH-Tunnel) gelesen und möchte die endlich einmal ausprobieren. Leider sind vom Rechner (auf dem man sich gerade befindet) keine Verbindungen nach draußen (schon gar keine SSH-Verbindungen auf Port 22) erlaubt. Einzig surfen kann man, aber das nur durch einen HTTP-Proxy (dieser Zwangs-Proxy heiße ab jetzt P und der HTTP-Proxy sei auf Port p zu finden).
- Man verwendet einen Anonymisierungsdienst, dessen Software lokal einen SOCKS-Proxy zur Verfügung stellt. Damit man ssh-Verbindungen anonymisieren kann (also durch den Dienst schicken kann), muss der SSH-Client diesen SOCKS-Proxy verwenden.
[bearbeiten] Mögliche Lösung (beim Zwangs-HTTP(s)-Proxy)
Eventuell lässt sich da was machen. Wenn der HTTP-Proxy P auch https-Verbindungen zulässt: Denn so eine https-Verbindung ist verschlüsselt und funktioniert mit der CONNECT-Methode, d.h. der Proxy kann gar nicht sehen, was da durch die Leitung geht. Das muss nicht unbedingt eine Surf-Verbindung sein, sondern kann auch eine ssh-Verbindung sein.
[bearbeiten] Wie funktioniert's beim HTTP(s)-Proxy
Zunächst benötigt man einen Server S mit laufendem SSH-Dienst. Allerdings muss dieser SSH-Server auf den (für ihn) ungewöhnlichen Port 443 lauschen (er darf zusätzlich auch noch an seinem üblichen Port 22 lauschen oder an anderen).
Dann braucht man ein Programm, welches mit Hilfe von P eine Verbindung zu einem gewünschten Rechner (in unserem Fall S) aufbaut und den Traffic durchleitet (sich also einfach nur um die Kommunikation mit dem Proxy kümmert und diesen mit der CONNECT-Methode auf Durchzug stellt). Dafür gibt es etwa Proxytunnel oder connect-proxy.
Jetzt muss man dem SSH-Client noch beibringen, nicht selbst die Verbindung aufzubauen, sondern dafür obiges Programm zu verwenden. Dafür gibt es bei OpenSSH etwa die Option ProxyCommand:
ssh -o ProxyCommand="<Pfad>/connect-proxy -H <host P>:p %h %p" -p 443 <user>@<host S>
Damit sollte man durch den HTTP-Proxy P hindurch die SSH-Verbindung zustande kommen.
[bearbeiten] Wie funktioniert's bei einem SOCKS-Proxy
Bei einem lokalen SOCKS-Proxy auf Port p sieht der Aufruf ähnlich aus:
ssh -o ProxyCommand="<Pfad>/connect-proxy -S 127.0.0.1:p %h %p" <user>@<host S>
Natürlich kann in diesem Fall der ssh-Server auf einem beliebigem Port lauschen.
[bearbeiten] Anmerkungen
Es gibt (momentan nur sehr vereinzelt) auch sehr "intelligente" HTTP-Proxies, die dann (oft recht schnell) merken, dass sich der Trafic (Menge in jeweilige Richtungen, Zeitdauer, usw.) erheblich von normalen verschlüsslten http(s)-Traffic abweicht und dann dicht machen.
In einigen großen Firmen sind auch https-Proxies üblich, die sich als Man-in-the-Middle in https-Verbindungen reinhängen. Man achte bei SSH über Proxy also immer darauf, dass man das Zertifikat von der gewünschten Gegenstelle und nicht ein Ersatzzertifikat vom HTTP-Proxy P bekommt, der in so einem Fall natürlich alles mitlesen und mitprotokollieren kann, was da durch den eigentlich sicheren SSH-Tunnel geht.
Nicht SSH-Proxy (mit SSH-Client einen SOCKS-Proxy erzeugen) und SSH über einen Proxy verwechseln. Das sind zwei ganz verschiendene Dinge.