- Dave McKay
@TheGurkha
- July 18, 2019, 9:00am EDT
Müssen Sie SSH zu einem unerreichbaren Linux-Computer nutzen? Lassen Sie sich von diesem anrufen und graben Sie sich dann in diese Verbindung ein, um Ihre eigene SSH-Remote-Sitzung zu erhalten. Wir zeigen Ihnen, wie das geht.
Wann Sie Reverse SSH Tunneling verwenden sollten
Manchmal sind entfernte Computer schwer zu erreichen. Der Standort, an dem sie sich befinden, kann strenge Firewall-Regeln haben, oder der lokale Administrator hat komplexe Regeln für die Netzwerkadressübersetzung aufgestellt. Wie können Sie einen solchen Computer erreichen, wenn Sie eine Verbindung zu ihm herstellen müssen?
Lassen Sie uns einige Bezeichnungen festlegen. Ihr Computer ist der lokale Computer, weil er sich in Ihrer Nähe befindet. Der Computer, zu dem Sie eine Verbindung herstellen wollen, ist der entfernte Computer, weil er sich an einem anderen Ort als Sie befindet.
Um zwischen dem lokalen und dem entfernten Computer in diesem Artikel zu unterscheiden, wird der entfernte Computer „howtogeek“ genannt und läuft unter Ubuntu Linux (mit lila Terminalfenstern). Der lokale Computer heißt „Sulaco“ und läuft unter Manjaro Linux (mit gelben Terminalfenstern).
Normalerweise würde man vom lokalen Computer aus eine SSH-Verbindung aufbauen und sich mit dem entfernten Computer verbinden. Das ist in dem von uns beschriebenen Netzwerkszenario keine Option. Es spielt wirklich keine Rolle, was das spezifische Netzwerkproblem ist – dies ist immer dann nützlich, wenn Sie nicht direkt eine SSH-Verbindung zu einem entfernten Computer herstellen können.
Wenn aber die Netzwerkkonfiguration auf Ihrer Seite einfach ist, kann der entfernte Computer eine Verbindung zu Ihnen herstellen. Das allein ist jedoch nicht ausreichend für Ihre Bedürfnisse, da Sie damit keine funktionierende Befehlszeilensitzung auf dem entfernten Computer erhalten. Aber es ist ein Anfang. Sie haben eine bestehende Verbindung zwischen den beiden Computern.
Die Antwort liegt im umgekehrten SSH-Tunneling.
Was ist umgekehrtes SSH-Tunneling?
Das umgekehrte SSH-Tunneling ermöglicht es Ihnen, diese bestehende Verbindung zu nutzen, um eine neue Verbindung von Ihrem lokalen Computer zurück zum entfernten Computer aufzubauen.
Da die ursprüngliche Verbindung vom entfernten Computer zu Ihnen aufgebaut wurde, können Sie sie in die andere Richtung verwenden, also „umgekehrt“. Und da SSH sicher ist, stellen Sie eine sichere Verbindung innerhalb einer bestehenden sicheren Verbindung her. Das bedeutet, dass Ihre Verbindung zum entfernten Computer wie ein privater Tunnel innerhalb der ursprünglichen Verbindung wirkt.
Und so kommen wir zu dem Namen „Reverse SSH Tunneling“
Wie funktioniert es?
Reverse SSH Tunneling beruht darauf, dass der entfernte Computer die bestehende Verbindung nutzt, um auf neue Verbindungsanfragen vom lokalen Computer zu lauschen.
Der entfernte Computer lauscht an einem Netzwerkport des lokalen Computers. Wenn er eine SSH-Anforderung an diesem Port erkennt, leitet er diese Verbindungsanforderung über die bestehende Verbindung an sich selbst zurück. Dies stellt eine neue Verbindung vom lokalen Computer zum entfernten Computer her.
Es ist einfacher einzurichten als zu beschreiben.
Using SSH Reverse Tunneling
SSH wird bereits auf Ihrem Linux-Computer installiert sein, 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 entfernten Computer verwenden wir den folgenden Befehl.
- Die Option
-R
(reverse) sagtssh
, dass neue SSH-Sitzungen auf dem entfernten Computer erstellt werden müssen. - Die Option „43022:localhost:22“ sagt
ssh
, dass Verbindungsanfragen an Port 43022 auf dem lokalen Computer an Port 22 auf dem entfernten Computer weitergeleitet werden sollen. Port 43022 wurde gewählt, weil er als nicht zugewiesen aufgeführt ist. Es handelt sich nicht um eine spezielle Nummer. - [email protected] ist das Benutzerkonto, mit dem der entfernte Computer auf dem lokalen Computer eine Verbindung herstellen soll.
ssh -R 43022:localhost:22 [email protected]
Möglicherweise erhalten Sie eine Warnung, dass Sie noch nie eine Verbindung zum lokalen Computer hergestellt haben. Oder Sie sehen 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 eine Verbindung vom entfernten Computer zum lokalen Computer hergestellt wurde.
Sie werden aufgefordert, das Passwort des Kontos einzugeben, das Sie für die Verbindung zum lokalen Computer verwenden.
Beachten Sie, dass sich die Eingabeaufforderung nach dem Herstellen der Verbindung von dave@howtogeek zu dave@sulaco ändert.
Wir sind jetzt vom entfernten Computer aus mit dem lokalen Computer verbunden. Das bedeutet, dass wir Befehle an ihn senden können. Verwenden wir den Befehl who
, um die Anmeldungen auf dem lokalen Computer zu sehen.
who
Wir können sehen, dass die Person mit dem Benutzerkonto dave sich auf dem lokalen Computer angemeldet hat und der entfernte Computer eine Verbindung (mit denselben Benutzeranmeldeinformationen) von der IP-Adresse 192.168.4.25 hergestellt hat.
VERWEIST: How to Determine the Current User Account in Linux
Verbinden mit dem entfernten Computer
Da die Verbindung vom entfernten Computer erfolgreich ist und er auf Verbindungen wartet, können wir versuchen, vom lokalen Computer aus eine Verbindung mit dem entfernten Computer herzustellen.
Der entfernte Computer lauscht am Port 43022 des lokalen Computers. Um eine Verbindung mit dem entfernten Computer herzustellen, bitten wir ssh
, eine Verbindung mit dem lokalen Computer an Port 43022 herzustellen. Diese Verbindungsanfrage wird an den entfernten Computer weitergeleitet.
ssh localhost -p 43022
Wir werden nach dem Passwort für das Benutzerkonto gefragt und dann vom lokalen Computer aus mit dem entfernten Computer verbunden. Unser Manjaro-Computer sagt fröhlich: „Willkommen bei Ubuntu 18.04.2 LTS“.
Beachten Sie, dass sich die Eingabeaufforderung von dave@sulaco zu dave@howtogeek geändert hat. Wir haben unser Ziel erreicht, eine SSH-Verbindung zu unserem schwer erreichbaren entfernten Computer herzustellen.
SSH mit Schlüsseln verwenden
Um die Verbindung vom entfernten Computer zum lokalen Computer bequemer zu machen, können wir SSH-Schlüssel einrichten.
Geben Sie auf dem entfernten Computer folgenden Befehl ein:
ssh-keygen
Sie werden zur Eingabe einer Passphrase aufgefordert. Sie können die Eingabetaste drücken, um die Passphrase-Fragen zu ignorieren, aber das wird nicht empfohlen. Das würde bedeuten, dass jeder auf dem entfernten 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 solide Passphrase.
Ihre SSH-Schlüssel werden erzeugt.
Wir müssen den öffentlichen Schlüssel auf den lokalen Computer übertragen. Verwenden Sie diesen Befehl:
ssh-copy-id [email protected]
Sie werden aufgefordert, das Passwort für das Benutzerkonto einzugeben, mit dem Sie sich anmelden, in diesem Fall [email protected].
Bei der ersten Verbindungsanfrage vom entfernten Computer zum lokalen Computer müssen Sie die Passphrase eingeben. Bei zukünftigen Verbindungsanfragen müssen Sie sie nicht mehr eingeben, solange das Terminalfenster geöffnet bleibt.
VERWEIST: How to Create and Install SSH Keys From the Linux Shell
Not All Tunnels Are Scary
Einige Tunnel können dunkel und verworren sein, aber Reverse SSH Tunneling ist nicht allzu schwer zu navigieren, wenn Sie die Beziehung zwischen dem entfernten Computer und dem lokalen Computer im Kopf behalten können. Dann kehren Sie es um.
Dave McKay hat zum ersten Mal mit Computern gearbeitet, als Lochstreifen in Mode waren, und seitdem hat er immer programmiert. Nach über 30 Jahren in der IT-Branche arbeitet er jetzt hauptberuflich als Technologiejournalist. Im Laufe seiner Karriere arbeitete er als freiberuflicher Programmierer, Manager eines internationalen Software-Entwicklungsteams, Projektmanager für IT-Dienstleistungen und zuletzt als Datenschutzbeauftragter. Dave ist ein Linux-Evangelist und Verfechter von Open Source. Vollständigen Lebenslauf lesen “