
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 Destination
und 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
ProxyJump
ist eine relativ neue Einstellung, die meiner Meinung nach intuitiver zu verwenden ist als ein ProxyCommand
. Jetzt ssh server1
wird 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 ssh
Befehl 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.