Angenommen, Sie haben diesen Befehl ausgeführt: ssh -f user@mysql-server.com -L 3306:mysql-server.com:3306 -N
wie in dem von Ihnen verlinkten Beitrag beschrieben.
Eine Aufschlüsselung des Befehls:
ssh
: das ist ziemlich selbsterklärend. Ruft auf ssh
.
-f
: (Von der man ssh
Seite)
Fordert ssh auf, kurz vor der Befehlsausführung in den Hintergrund zu gehen. Dies ist nützlich, wenn ssh nach Passwörtern oder Passphrasen fragen soll, der Benutzer dies jedoch im Hintergrund wünscht.
Senden ssh
Sie im Wesentlichen an den Hintergrund, sobald Sie Kennwörter eingegeben haben, um die Verbindung herzustellen. Es gibt Ihnen die Shell-Eingabeaufforderung zurück, localhost
anstatt Sie anzumelden remote-host
.
user@mysql-server.com
: Der Remote-Server, bei dem Sie sich anmelden möchten.
-L 3306:mysql-server.com:3306
: Das ist das Interessante. -L
(von der man ssh
Seite):
[bind_address:] port: host: hostport Gibt an, dass der angegebene Port auf dem lokalen (Client-) Host an den angegebenen Host und Port auf der Remote-Seite weitergeleitet werden soll.
So -L 3306:mysql-server.com:3306
bindet den lokalen Port 3306
an den Remote - Port 3306
auf dem Host mysql-server.com
.
Wenn Sie eine Verbindung zum lokalen Port herstellen 3306
, wird die Verbindung über den sicheren Kanal an weitergeleitet mysql-server.com
. Der Remote-Host stellt mysql-server.com
dann eine Verbindung zu einem mysql-server.com
Port her 3306
.
-N
: Führen Sie keinen Befehl aus. Dies ist nützlich, um "nur Ports weiterzuleiten" (unter Angabe der Manpage).
Hat dieser Befehl Auswirkungen auf den Server?
Ja, es wird eine Verbindung zwischen localhost und mysql-server.com auf Port 3306 hergestellt .
Und wie schließe ich diesen Tunnel ...
Wenn Sie verwendet haben -f
, werden Sie feststellen, dass der von ssh
Ihnen geöffnete Prozess in den Hintergrund tritt. Die schönere Methode zum Schließen ist das Ausführen ps aux | grep 3306
, Finden pid
des ssh -f ... -L 3306:mysql-server.com:3306 -N
und kill <pid>
. (Oder vielleicht kill -9 <pid>
; ich vergesse, ob es nur kill
funktioniert). Das hat den schönen Vorteil, dass Sie nicht alle anderen ssh
Verbindungen beenden. Wenn Sie mehr als eine haben, kann die Wiederherstellung dieser ein leichter ... Schmerz sein.
... weil ich mein lokales MySQL jetzt nicht richtig verwenden kann.
Dies liegt daran, dass Sie den lokalen mysql
Prozess effektiv "erfasst" und den gesamten Datenverkehr, der versucht, eine Verbindung zu ihm herzustellen, an den Remote- mysql
Prozess weitergeleitet haben. Eine viel schönere Lösung wäre, den lokalen Port 3306 nicht in der Portweiterleitung zu verwenden. Verwenden Sie etwas, das nicht verwendet wird, wie 33060. (Höhere Zahlen werden im Allgemeinen weniger verwendet; es ist ziemlich üblich, eine Kombination wie diese weiterzuleiten: "2525-> 25", "8080-> 80", "33060-> 3306" oder ähnlich. Erleichtert das Erinnern etwas).
Wenn Sie also verwenden ssh -f user@mysql-server.com -L 33060:mysql-server.com:3306 -N
, verweisen Sie Ihre Zend-Funktion zum Verbinden mit MySQL localhost
auf den Port 33060
, der eine Verbindung zum mysql-server.com
Port herstellen würde 3306
. Sie können natürlich immer noch eine Verbindung zu einem localhost
Port herstellen 3306
, sodass Sie weiterhin den lokalen mysql
Server verwenden können.