GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So richten Sie einen Reverse-SSH-Tunnel unter Linux ein

Reverse SSH ist eine Technik, die verwendet werden kann, um von außen auf Systeme (die sich hinter einer Firewall befinden) zuzugreifen.

Wie Sie bereits wissen, ist SSH ein Netzwerkprotokoll, das die kryptografische Kommunikation zwischen Netzwerkknoten unterstützt. Mit diesem Protokoll können Sie eine sichere Remote-Anmeldung, eine sichere Kopie von/zu einem Remote-Rechner usw. durchführen.

Normalerweise werden Sie Folgendes tun, um eine sichere Verbindung zu einem Remote-Server mit dem ssh-Befehl herzustellen.

$ ssh [your-account-login]@[server-ip]

Was ist Reverse-SSH?

SSH ist ein sehr gutes Tool, um sicher auf entfernte Maschinen oder Server zuzugreifen. Das Problem tritt jedoch auf, wenn Sie versuchen, eine Verbindung zu einem Remote-Server herzustellen, der sich hinter einer Firewall befindet, und diese Firewall jede eingehende Verbindungs- oder Datenübertragungsanforderung ablehnt, die keine vorherige ausgehende Anforderung hat. Das bedeutet, dass nur die Verbindungen zugelassen werden, die von der entfernten Servermaschine initiiert werden. Dies ist ein echtes Problem für diejenigen, die aus der Ferne auf diesen Server zugreifen möchten.

Reverse SSH bietet eine Technik, mit der Sie ein normales SSH zu diesem Remote-Server-Rechner simulieren können.

Das Hauptproblem besteht darin, dass die Firewall die SSH-Verbindung ablehnt, die Ihr Computer mit dem Remote-Server-Computer herzustellen versucht. Aber Sie wissen, dass die gleiche Firewall keine Probleme mit den Verbindungen hat, die von der Servermaschine ausgehen. Warum also nicht jemanden bitten, der hinter der Firewall sitzt, etwas zu tun, mit dem Sie Ihr Ziel erreichen können, aus der Ferne auf den Server zuzugreifen. Dazu müssen wir die Option ssh -R verwenden.

Dies ist die Beschreibung der Option ssh -R von der Manpage:

-R [bind_address:]port:host:hostport

Gibt an, dass der angegebene Port auf dem entfernten (Server-)Host an den angegebenen Host und Port auf der lokalen Seite weitergeleitet werden soll. Dies funktioniert, indem ein Socket zum Abhören des Ports auf der Remote-Seite zugewiesen wird, und immer wenn eine Verbindung zu diesem Port hergestellt wird, wird die Verbindung über den sicheren Kanal weitergeleitet und eine Verbindung zum Host-Port hostport vom lokalen Computer hergestellt.

Sie können also den ssh-Befehl mit der Option -R (in unserem Fall vom Server) verwenden, um eine Verbindung zu Ihrem Computer herzustellen, dort einen Port zuweisen und sicherstellen, dass jede Verbindungsanforderung an diesem Port an den ssh-Port des Remote-Servers weitergeleitet wird.

Anstatt dass Ihr Computer eine SSH-Verbindung ausführt, führt die Server-Maschine eine SSH-Verbindung aus und stellt durch die Portweiterleitung sicher, dass Sie eine SSH-Verbindung zum Server-Computer herstellen können.

Wie erstelle ich einen umgekehrten SSH-Tunnel?

Hier ist der Befehl, den Ihr Freund, der auf der Remote-Serverseite sitzt, auf dem Server ausführen sollte:

ssh -fN -R 7000:localhost:22 username@yourMachine-ipaddress

Diese SSH-Verbindungsanforderung, die vom Remote-Server an Ihren Computer gesendet wird, stellt also sicher, dass jede SSH-Verbindungsanforderung für Port 7000 auf Ihrem Computer an Port 22 des Remote-Servers weitergeleitet wird.

Führen Sie nun eine SSH-Verbindungsanfrage von Ihrem Computer zu Ihrem eigenen Computer an Port 7000 aus:

ssh username@localhost -p 7000

Hier scheint es zwar so, als würden Sie ssh auf localhost ausführen, aber Ihre Anfrage würde an den Remote-Host weitergeleitet. Sie sollten also Ihren Konto-Benutzernamen auf dem Remote-Server verwenden und das entsprechende Passwort eingeben, wenn Sie zur Eingabe des Passworts aufgefordert werden.

Dies sollte die meisten Aspekte im Zusammenhang mit der Reverse-SSH-Technik klären. Aber es gibt einen Haken. Der Haken ist, dass Sie einen Freund von Ihnen – der hinter der Firewall sitzt – bitten müssen, zuerst eine SSH-Verbindung herzustellen. Dies ist nicht immer machbar.

Um dieses Problem zu lösen, können Sie eine Maschine, die sich außerhalb der Firewall befindet (genau wie Ihre), so einrichten, dass sie immer eingeschaltet ist. Nennen wir diese Maschine als machine_z.

Der Vorteil von machine_z besteht darin, dass Sie dieses umgekehrte SSH-Setup einmal darauf ausführen und es so belassen können. Wenn Sie sich jederzeit bei einem Remote-Computer anmelden müssen, können Sie ssh in machine_z an einem bestimmten Port (wie zuvor gezeigt) eingeben, und Ihre Verbindungsanforderung wird an den Remote-Server-Computer weitergeleitet, und voilà, Sie werden Befehle auf dem Remote ausführen Server.

In diesem Zusammenhang können Sie auch SSH ohne Passwort einrichten, um sich mit einem anderen Server zu verbinden, ohne das Passwort einzugeben.

Einige Einstellungen, die Sie auf machine_z konfigurieren müssen, wären:

  • Stellen Sie sicher, dass die Parameter TCPKeepAlive, ClientAliveInterval, ClientAliveCountMax und GatewayPorts auf geeignete Werte eingestellt sind. Diese Parameter befinden sich in der Datei /etc/sshd_config oder /etc/ssh/sshd_config
  • Wenn Sie einige Änderungen an den obigen Parametern vornehmen, sollten Sie den sshd-Daemon neu starten, um die Änderungen widerzuspiegeln.
  • Stellen Sie außerdem sicher, dass Sie den ersten ssh-Befehl (der vom Remote-Server zu machine_z ausgeführt wird) mit dem Befehl nohup ausführen, damit diese ssh-Sitzung immun gegen Aufhänger wird, die auftreten können, wenn sich ein Benutzer abmeldet.

Linux
  1. Richten Sie Apache Traffic Server als Reverse Proxy unter Linux ein

  2. Wie man SSH unter Linux von Android aus macht

  3. So richten Sie passwortloses SSH unter Linux ein

  4. So richten Sie eine passwortlose SSH-Anmeldung unter Linux ein

  5. So führen Sie SCP vom Linux-Server zum Windows-Client aus

So richten Sie einen Sicherungsserver mit Rsnapshot unter Linux ein

So richten Sie einen Streaming Media Server mit Jellyfin unter Linux ein

So richten Sie die Multi-Faktor-Authentifizierung für SSH unter Linux ein

Ssh – Wie funktioniert Reverse-SSH-Tunneling?

Wie Sie von Windows aus SSH in Ihren Linux-Server einbinden

So führen Sie SSH zum Server über Linux