Was ist Reverse-SSH-Tunneling? (und wie man es benutzt)

Müssen Sie eine SSH-Verbindung zu einem nicht erreichbaren Linux-Computer herstellen? Lassen Sie sich von ihm anrufen und graben Sie dann diese Verbindung ein, um Ihre eigene Remote-SSH-Sitzung zu erhalten. Wir zeigen Ihnen wie.

Wann Sie Reverse-SSH-Tunneling verwenden möchten

Manchmal sind Remote-Computer schwer zu erreichen. Die Site, auf der sie sich befinden, hat möglicherweise strenge Firewall-Regeln, oder der lokale Administrator hat möglicherweise einen Komplex eingerichtet Netzwerkadressübersetzung Regeln. Wie erreichen Sie einen solchen Computer, wenn Sie eine Verbindung zu ihm herstellen müssen?

Lassen Sie uns einige Labels erstellen. Ihr Computer ist der lokale Computer, da er sich in Ihrer Nähe befindet. Der Computer, mit dem Sie eine Verbindung herstellen möchten, ist der Remote-Computer, da er sich an einem anderen Ort befindet als Sie.

Um zwischen den in diesem Artikel verwendeten lokalen und entfernten Computern zu unterscheiden, heißt der entfernte Computer „wdzwdz“ und führt Ubuntu Linux (mit lila Terminalfenstern) aus. Der lokale Rechner heißt „Sulaco“ und läuft mit Manjaro Linux (mit gelben Terminalfenstern).

Normalerweise würdest du feuern und SSH-Verbindung vom lokalen Computer und stellen Sie eine Verbindung zum Remote-Computer her. Das ist in dem von uns beschriebenen Netzwerkszenario keine Option. Es spielt wirklich keine Rolle, um welches Netzwerkproblem es sich handelt – dies ist nützlich, wenn Sie nicht direkt per SSH auf einen Remote-Computer zugreifen können.

Wenn die Netzwerkkonfiguration auf Ihrer Seite jedoch unkompliziert ist, kann der Remote-Computer eine Verbindung zu Ihnen herstellen. Das allein reicht jedoch für Ihre Anforderungen nicht aus, da es Ihnen keine funktionierende Befehlszeilensitzung auf dem Remote-Computer zur Verfügung stellt. Aber es ist ein Anfang. Sie haben eine Verbindung zwischen den beiden Computern hergestellt.

  Was bedeutet „OTOH“ und wie wird es verwendet?

Die Antwort liegt im Reverse-SSH-Tunneling.

Was ist Reverse-SSH-Tunneling?

Reverse-SSH-Tunneling ermöglicht es Ihnen, diese hergestellte Verbindung zu verwenden, um eine neue Verbindung von Ihrem lokalen Computer zurück zum Remote-Computer herzustellen.

Da die ursprüngliche Verbindung vom Remote-Computer zu Ihnen kam, verwenden Sie sie in die andere Richtung, um sie „umgekehrt“ zu verwenden. Und weil SSH sicher ist, fügen Sie eine sichere Verbindung in eine vorhandene sichere Verbindung ein. Dies bedeutet, dass Ihre Verbindung zum Remote-Computer als privater Tunnel innerhalb der ursprünglichen Verbindung fungiert.

Und so kommen wir zum Namen „Reverse SSH Tunneling“.

Wie funktioniert es?

Reverse-SSH-Tunneling basiert darauf, dass der Remote-Computer die hergestellte Verbindung verwendet, um auf neue Verbindungsanforderungen vom lokalen Computer zu lauschen.

Der Remotecomputer lauscht an einem Netzwerkport des lokalen Computers. Wenn es eine SSH-Anfrage an diesen Port erkennt, leitet es diese Verbindungsanfrage über die hergestellte Verbindung an sich selbst zurück. Dadurch wird eine neue Verbindung vom lokalen Computer zum Remotecomputer hergestellt.

Es ist einfacher einzurichten als es zu beschreiben ist.

Verwenden von SSH-Reverse-Tunneling

SSH ist bereits auf Ihrem Linux-Computer installiert, aber Sie müssen möglicherweise den SSH-Daemon (sshd) starten, wenn der lokale Computer noch nie SSH-Verbindungen akzeptiert hat.

sudo systemctl start sshd

Um den SSH-Daemon bei jedem Neustart Ihres Computers zu starten, verwenden Sie diesen Befehl:

sudo systemctl enable sshd

Auf dem Remote-Computer verwenden wir den folgenden Befehl.

Die Option -R (reverse) teilt ssh mit, dass neue SSH-Sitzungen auf dem Remote-Computer erstellt werden müssen.
„43022:localhost:22“ teilt ssh mit, dass Verbindungsanfragen an Port 43022 auf dem lokalen Computer an Port 22 auf dem Remote-Computer weitergeleitet werden sollen. Port 43022 wurde gewählt, weil er als nicht zugeordnet gelistet. Es ist keine spezielle Nummer.
[email protected] ist das Benutzerkonto, mit dem sich der Remotecomputer auf dem lokalen Computer verbinden wird.

ssh -R 43022:localhost:22 [email protected]

Möglicherweise erhalten Sie eine Warnung, dass Sie noch nie zuvor eine Verbindung zum lokalen Computer hergestellt haben. Oder Sie sehen möglicherweise eine Warnung, wenn die Verbindungsdetails zur Liste der erkannten SSH-Hosts hinzugefügt werden. Was Sie sehen – wenn überhaupt – hängt davon ab, ob jemals Verbindungen vom Remote-Computer zum lokalen Computer hergestellt wurden.

  So fügen Sie Personen und Firmen zu Kontakten auf dem Mac hinzu

Sie werden aufgefordert, das Kennwort des Kontos einzugeben, mit dem Sie sich mit dem lokalen Computer verbinden.

Beachten Sie, dass sich die Eingabeaufforderung ändert, wenn die Verbindung hergestellt wurde [email protected] zu [email protected]

Wir sind jetzt vom Remote-Computer mit dem lokalen Computer verbunden. Das heißt, wir können ihm Befehle erteilen. Lassen Sie uns den Befehl who verwenden, um die Anmeldungen auf dem lokalen Computer anzuzeigen.

who

Wir können sehen, dass sich die Person mit dem Benutzerkonto dave beim lokalen Computer angemeldet hat und der Remote-Computer sich (mit denselben Benutzeranmeldeinformationen) von der IP-Adresse 192.168.4.25 aus verbunden hat.

Herstellen einer Verbindung mit dem Remote-Computer

Da die Verbindung vom Remote-Computer erfolgreich ist und auf Verbindungen lauscht, können wir versuchen, vom lokalen Computer aus eine Verbindung zum Remote-Computer herzustellen.

Der Remote-Computer überwacht Port 43022 auf dem lokalen Computer. Um eine Verbindung zum Remote-Computer herzustellen, bitten wir – etwas widersinnig – ssh, eine Verbindung zum lokalen Computer auf Port 43022 herzustellen. Diese Verbindungsanforderung wird an den Remote-Computer weitergeleitet.

ssh localhost -p 43022

Wir werden zur Eingabe des Benutzerkonto-Passworts aufgefordert und dann vom lokalen Computer mit dem Remote-Computer verbunden. Unser Manjaro-Computer sagt fröhlich: „Willkommen bei Ubuntu 18.04.2 LTS“.

  So verschieben Sie Notizen von Ihrem iPhone zu iCloud

Beachten Sie, dass sich die Eingabeaufforderung geändert hat von [email protected] zu [email protected] Wir haben unser Ziel erreicht, eine SSH-Verbindung zu unserem schwer erreichbaren Remote-Computer herzustellen.

SSH mit Schlüsseln verwenden

Um die Verbindung vom Remote-Computer zum lokalen Computer bequemer zu machen, können wir SSH-Schlüssel einrichten.

Geben Sie auf dem Remote-Computer diesen Befehl ein:

ssh-keygen

Sie werden zur Eingabe einer Passphrase aufgefordert. Sie können die Eingabetaste drücken, um die Passphrasenfragen zu ignorieren, dies wird jedoch nicht empfohlen. Dies würde bedeuten, dass jeder auf dem Remote-Computer eine SSH-Verbindung zu Ihrem lokalen Computer herstellen könnte, ohne nach einem Passwort gefragt zu werden.

Drei oder vier durch Symbole getrennte Wörter ergeben eine robuste Passphrase.

Ihre SSH-Schlüssel werden generiert.

Wir müssen den öffentlichen Schlüssel auf den lokalen Computer übertragen. Verwenden Sie diesen Befehl:

ssh-copy-id [email protected]

Sie werden nach dem Passwort für das Benutzerkonto gefragt, mit dem Sie sich anmelden, in diesem Fall [email protected]

Wenn Sie zum ersten Mal eine Verbindungsanfrage vom Remote-Computer zum lokalen Computer stellen, müssen Sie die Passphrase angeben. Sie müssen es bei zukünftigen Verbindungsanfragen nicht erneut eingeben, solange das Terminalfenster geöffnet bleibt.

Nicht alle Tunnel sind beängstigend

Einige Tunnel können dunkel und verwinkelt sein, aber umgekehrtes SSH-Tunneling ist nicht allzu schwer zu navigieren, wenn Sie die Beziehung zwischen dem Remote-Computer und dem lokalen Computer klar im Kopf behalten können. Dann kehren Sie um.