Angenommen, Sie haben diesen Befehl ausgeführt: ssh -f user@mysql-server.com -L 3306:mysql-server.com:3306 -Nwie 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 sshSeite)
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 sshSie im Wesentlichen an den Hintergrund, sobald Sie Kennwörter eingegeben haben, um die Verbindung herzustellen. Es gibt Ihnen die Shell-Eingabeaufforderung zurück, localhostanstatt 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 sshSeite):
[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:3306bindet den lokalen Port 3306an 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.comdann eine Verbindung zu einem mysql-server.comPort 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 sshIhnen geöffnete Prozess in den Hintergrund tritt. Die schönere Methode zum Schließen ist das Ausführen ps aux | grep 3306, Finden piddes ssh -f ... -L 3306:mysql-server.com:3306 -Nund kill <pid>. (Oder vielleicht kill -9 <pid>; ich vergesse, ob es nur killfunktioniert). Das hat den schönen Vorteil, dass Sie nicht alle anderen sshVerbindungen 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 localhostauf den Port 33060, der eine Verbindung zum mysql-server.comPort herstellen würde 3306. Sie können natürlich immer noch eine Verbindung zu einem localhostPort herstellen 3306, sodass Sie weiterhin den lokalen mysqlServer verwenden können.