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

SSH zu Remote-Hosts über einen Proxy oder eine Bastion mit ProxyJump

Das Konzept der Bastion-Hosts ist nichts Neues in der Computertechnik. Baston-Hosts sind in der Regel öffentlich zugängliche, gehärtete Systeme, die als Zugangspunkt zu Systemen hinter einer Firewall oder einem anderen eingeschränkten Standort dienen, und sie sind mit dem Aufkommen von Cloud Computing besonders beliebt.

Die ssh Der Befehl bietet eine einfache Möglichkeit, Bastion-Hosts zu nutzen, um mit einem einzigen Befehl eine Verbindung zu einem Remote-Host herzustellen. Anstatt zuerst per SSH zum Bastion-Host zu gehen und dann ssh zu verwenden auf der Bastion, um sich mit dem Remote-Host ssh zu verbinden kann die ersten und zweiten Verbindungen mithilfe von ProxyJump selbst erstellen .

ProxyJump

Der ProxyJump , oder das -J Flag, wurde in ssh eingeführt Version 7.3. Um ihn zu verwenden, geben Sie nach dem -J den Bastion-Host an, über den eine Verbindung hergestellt werden soll -Flag, plus den Remote-Host:

$ ssh -J <bastion-host> <remote-host>

Sie können auch bestimmte Nutzernamen und Ports festlegen, wenn sie sich zwischen den Hosts unterscheiden:

$ ssh -J user@<bastion:port> <user@remote:port>

Die ssh Man- (oder Handbuch-)Seite (man ssh ) weist darauf hin, dass mehrere, durch Kommas getrennte Hostnamen angegeben werden können, um durch eine Reihe von Hosts zu springen:

$ ssh -J <bastion1>,<bastion2> <remote>

Diese Funktion ist nützlich, wenn es mehrere Trennungsebenen zwischen einer Bastion und dem endgültigen Remote-Host gibt. Zum Beispiel ein öffentlicher Bastion-Host, der Zugriff auf eine Gruppe von Hosts der „Webebene“ gewährt, innerhalb derer auf eine weitere geschützte Gruppe der „Datenbankebene“ zugegriffen werden kann.

Festkodierte Proxy-Hosts in ~/.ssh/config

Das -J Flag bietet Flexibilität für die einfache Angabe von Proxy- und Remote-Hosts nach Bedarf, aber wenn ein bestimmter Bastion-Host regelmäßig verwendet wird, um eine Verbindung zu einem bestimmten Remote-Host herzustellen, wird der ProxyJump Konfiguration kann in ~/.ssh/config eingestellt werden um automatisch die Verbindung zur Bastion auf dem Weg zum entfernten Host herzustellen:

### The Bastion Host
Host bastion-host-nickname
  HostName bastion-hostname

### The Remote Host
Host remote-host-nickname
  HostName remote-hostname
  ProxyJump bastion-host-nickname

Unter Verwendung der obigen Beispielkonfiguration, wenn ein ssh Verbindung wird wie folgt hergestellt:

$ ssh remote-host-nickname

Die ssh Der Befehl erstellt zuerst eine Verbindung zum Bastion-Host bastion-hostname (der Host, auf den mit Spitznamen im ProxyJump des Remote-Hosts verwiesen wird Einstellungen), bevor Sie sich mit dem Remote-Host verbinden.

Eine Alternative:Weiterleitung von stdin und stdout

ProxyJump ist die vereinfachte Art, eine Funktion zu verwenden, die ssh seit langem: ProxyCommand . ProxyCommand funktioniert durch Weiterleitung von Standardeingang (stdin) und Standardausgang (stdout) von der Remote-Maschine durch den Proxy oder Bastion-Hosts.

Der ProxyCommand selbst ist ein spezifischer Befehl, der verwendet wird, um sich mit einem entfernten Server zu verbinden – im Fall des vorherigen Beispiels wäre das der manuelle ssh Befehl, der verwendet wird, um sich zuerst mit der Bastion zu verbinden:

$ ssh -o ProxyCommand="ssh -W %h:%p bastion-host" remote-host

Der %h:%p Argumente für das -W Das obige Flag gibt an, dass Standard-Ein- und -Ausgänge an den Remote-Host weitergeleitet werden (%h ) und den Port des Remote-Hosts (%p ).

ProxyCommand in ~/.ssh/config

Wie bei ProxyJump , ProxyCommand kann in ~/.ssh/config eingestellt werden Datei für Hosts, die immer diese Konfiguration verwenden:

Host remote-host
  ProxyCommand ssh bastion-host -W %h:%p

Mit dieser Einstellung in ~/.ssh/config , jeder ssh Die Verbindung zum entfernten Host erfolgt durch Weiterleitung von stdin und stdout über eine sichere Verbindung von bastion-host .

Die ssh Befehl ist ein mächtiges Werkzeug. Obwohl es meistens in seiner einfachsten Form verwendet wird, ssh user@hostname , gibt es buchstäblich Dutzende von Verwendungsmöglichkeiten mit Flags und Konfigurationen, um Verbindungen von einem Host zum anderen herzustellen. Sehen Sie sich ssh an 's Handbuchseite (man ssh ), um all die verschiedenen Optionen zu entdecken, die mit diesem scheinbar einfachen Programm verfügbar sind.


Linux
  1. Wie man über Host (Jumpserver) ssh, um einen anderen Server zu erreichen

  2. Ssh – Eine Datei mit Ssh zurück auf das lokale System kopieren?

  3. Ssh – SCP über mehrere Hosts?

  4. So verbinden Sie einen Remote-Host mit dem ssh-Befehl

  5. SSH mit authorisierten_Schlüsseln zu einem Ubuntu-System mit verschlüsseltem Homedir?

SSH-Befehle in Linux mit Verwendungsbeispielen

Ssh – Wie vermeide ich, dass Ssh um Erlaubnis fragt?

Wie stellt man über einen Remote-Server über eine SSH-Verbindung eine Verbindung zum Internet her?

Kann über LAN ping/ssh, aber nicht mit Wi-Fi

Rsync mit SSH-Aufforderung zur Eingabe des Remote-Passworts

SSH-Verbindung über einen Reverse (Remote) SSH-Tunnel