Diese Antwort setzt voraus, dass sshd so konfiguriert ist, dass Portweiterleitung für HOST_1 und HOST_2 möglich ist.
Sie haben bereits das meiste gefunden, was Sie brauchen (Option zwei in der Antwort von Mika Fischer in Ihrem ersten Link).
Tunnel von localhost nach host1 und von host1 nach host2:
ssh -L 9999:localhost:9999 host1 ssh -L 9999:localhost:1234 -N host2
Dadurch wird ein Tunnel von localhost nach host1 und ein weiterer Tunnel von host1 nach host2 geöffnet. Der Port 9999 bis host2: 1234 kann jedoch von jedermann auf host1 verwendet werden. Dies kann ein Problem sein oder nicht.
Die Idee ist, die Portweiterleitung aneinander zu reihen (dh Sie leiten einen lokalen Port an einen Remote-Port weiter, den Sie dann an einen noch weiter entfernten Port weiterleiten).
Für Ihr Beispiel wäre der Befehl
ssh -tt -L 3306:localhost:XXXX [user@]HOST_1 ssh -L XXXX:MYSQL_HOST:3306 [user@]HOST_2
wobei XXXX ein beliebiger Port über 1024 ist, der nicht bereits verwendet wird (verwenden Sie dieselbe Nummer, um beide Instanzen zu ersetzen)
Nach der Ausführung werden Sie zweimal nach dem Kennwort gefragt (einmal für HOST_1 und einmal für HOST_2), es sei denn, Sie verwenden SSH-Schlüssel für die kennwortlose Anmeldung. Der Tunnel funktioniert so lange, wie Sie über HOST_1 mit HOST_2 verbunden sind.
Hier ist die Aufschlüsselung:
ssh
ist der lokale SSH-Client, den Sie ausführen
-tt
erzwingt die Zuweisung von Pseudo-tty (siehe Pseudo-Terminal wird nicht zugewiesen, da stdin kein Terminal ist, warum dies erforderlich ist)
-L 3306:localhost:XXXX [user@]HOST_1
sagt Ihrem lokalen SSH-Client, 3306 auf Ihrem lokalen System an Port XXXX auf "localhost" auf der anderen Seite der SSH-Verbindung weiterzuleiten. Sie müssen nur angeben, user@
ob sich der Benutzer auf Ihrem lokalen Computer von dem Benutzer unterscheidet, mit dem Sie sich unter HOST_1 verbinden. Im Allgemeinen können Sie einen anderen lokalen Port als 3306 angeben, aber dann würden Sie Ihren MySQL-Client auf 127.0.0.1: [Ihren gewählten Port] verweisen.
ssh
(der zweite) Wie Sie vielleicht wissen, hat ssh die Möglichkeit, einen einzelnen Befehl auszuführen, anstatt eine Shell zu starten. Sie verwenden dies, um eine weitere SSH-Sitzung auf HOST_1 auszuführen, die den nächsten Link in der Portweiterleitungskette erstellt.
-L XXXX:MYSQL_HOST:3306 [user@]HOST_2
Da diese ssh-Sitzung auf HOST_1 ausgeführt wird, leitet XXXX auf der lokalen Seite (HOST_1) (die von 3306 auf Ihrem Client weitergeleitet wird) an Port 3306 auf MYSQL_HOST auf der fernen Seite (HOST_2) weiter. Sie müssen nur angeben, user@
ob sich der Benutzer von HOST_1 von dem Benutzer unterscheidet, zu dem Sie sich mit HOST_2 verbinden.
Wenn zusätzliche Hops erforderlich sind, fügen Sie Instanzen ssh -L XXXX:localhost:XXXX hostX
für jeden Hop in der Mitte hinzu, sofern auf jedem Server im Pfad ein verfügbarer Port vorhanden ist.