Proxy-SSH-Verbindungen

Proxy-SSH-Verbindungen

Entschuldigen Sie, wenn dies schon einmal gefragt wurde, aber ich versuche derzeit, eine Lösung zu finden, mit der wir SSH-Verbindungen ähnlich wie ein RDP-Gateway herstellen können. Für diejenigen, die es nicht kennen: RDP Gateway ermöglicht es Ihnen, RDP-Verbindungen im Wesentlichen über einen anderen Server zu proxyen. Remote Desktop authentifiziert sich transparent beim RDP-Gateway-Server und stellt von dort aus die Verbindung zum Endpunktserver her, sodass Sie die Endpunktserver über private IP-Adressen oder interne DNS-Namen aufrufen können, wodurch Ihre Gefährdung begrenzt wird.

Momentan denke ich daran, die Portweiterleitung über SSH einzurichten, sodass jeder Server, auf den wir hinter dem Tunnelproxy zugreifen müssen, auf einem anderen Port liegt, der vom Mittelpunktserver weitergeleitet wird. Das scheint mir jedoch keine optimale Lösung zu sein, daher würde mich interessieren, ob es dafür eine bessere Möglichkeit gibt.

Antwort1

In SSH-Begriffen spricht man oft von einemBastion-HostoderSprungserver- eine einzelne Maschine (normalerweise in Ihrer DMZ), die eingehende SSH-Verbindungen akzeptiert und von der aus Sie dann eine SSH-Verbindung zu den tatsächlich von Ihnen verwalteten Systemen herstellen können.

                                                                             ==> | Server1 |
 _________                             ___________                         /      ---------
| user PC |   ===(SSH on port 22)===> | jump host |  ===(SSH on port 22)== ==+>  | Server2 | 
 _________                             ___________                         \      _________
                                                                             ==> | Server3 |

Zur Erhöhung der Sicherheit verlangt der Jump-Server häufig eine Zwei-Faktor-Authentifizierung und/oder akzeptiert eingehende SSH-Sitzungen erst nach dem Aufbau einer VPN-Verbindung.

Anstatt sich zunächst beim Jump-Host anzumelden und dort in der Eingabeaufforderung die zweite SSH-Sitzung zu starten, können Sie dies mit OpenSSH in einem einzigen Befehl konfigurieren.

Ich ziehe es vor, alle Einstellungen explizit in meinem mit einem kurzen Alias ​​für jeden Host festzulegen ~/.ssh/config. Auf diese Weise muss ich keine Befehlszeilenflags verwenden und kann einfach weniger eingeben und verwenden ssh Destinationund fertig.

Host jumphost
    Hostname jumphost.example.com
    User serverfault
    ForwardAgent yes
    AddKeysToAgent yes
    UseKeychain yes                                  # Specific to OS X 
    IdentityFile ~/.ssh/id_rsa.jumphost

Host server1
    Hostname server1.int.example.com
    User hbruijn 
    ForwardAgent yes
    AddKeysToAgent yes
    UseKeychain yes                                  # Specific to OS X
    IdentityFile ~/.ssh/id_rsa.int.example.com
    ProxyJump jumphost

ProxyJumpist eine relativ neue Einstellung, die meiner Meinung nach intuitiver zu verwenden ist als ein ProxyCommand. Jetzt ssh server1wird genau das getan, was Sie brauchen: Erstellen Sie zuerst eine Sitzung mit [email protected]als erstem Hop, von dem aus Sie mit optional einem anderen SSH-Schlüssel und einem anderen Benutzernamen zu Ihrem nächsten Hop tunneln [email protected].

Sie können den Befehl ProxyJump auch direkt in der Befehlszeile verwenden:

ssh -J [email protected] [email protected]

Ein anderer Ansatz wird diskutiert indiese Frage und Antwort

Antwort2

Die kanonische Lösung besteht darin, IPv6 (und/oder ein VPN) einzusetzen und diese Art von Workaround von vornherein zu vermeiden. Wenn Sie das heute jedoch nicht tun können, spricht man von einer Jumpbox oder einem Bastion-Host oder ähnlichen Begriffen. Dabei handelt es sich lediglich um eine Maschine, die Sie aufstellen, bei der sich Ihre Benutzer per SSH anmelden und dann per SSH weiter zu internen Hosts gelangen können, auf die diese Box Netzwerkzugriff hat. Der sshBefehl verfügt sogar über eine Befehlszeilenoption, die die Verbindung über den Jump-Host automatisiert.

     -J destination
             Connect to the target host by first making a ssh connection to
             the jump host described by destination and then establishing a
             TCP forwarding to the ultimate destination from there.  Multiple
             jump hops may be specified separated by comma characters.  This
             is a shortcut to specify a ProxyJump configuration directive.
             Note that configuration directives supplied on the command-line
             generally apply to the destination host and not any specified
             jump hosts.  Use ~/.ssh/config to specify configuration for jump
             hosts.

verwandte Informationen