Angenommen, Sie haben diesen Befehl ausgeführt: ssh -f [email protected] -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
.
[email protected]
: 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 [email protected] -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.
-9
nicht benötigtkill
, da der Prozess noch gut funktioniert ;-)Dadurch werden alle SSH-Sitzungen beendet, die Sie vom Terminal aus geöffnet haben.
quelle
killall ssh
ist ein ziemlich rücksichtsloser Befehl. Ich empfehle, Ihre Prozessliste zu durchsuchen (dhps aux | grep ssh
wie oben von @simont vorgeschlagen), um die spezifische Prozess-ID Ihres SSH-Tunnelprozesses zu ermitteln. Dann können Sie pid das speziell töten.Hinweis: Hinzufügen als Antwort, da Kommentare keine Codeblöcke unterstützen.
Meiner Meinung nach ist es besser,
-f
den Prozess NICHT wie gewohnt zu verwenden und stattdessen einfach als Hintergrund zu verwenden&
. Das gibt dir genau die PID, die du zum Töten brauchst:Oder noch besser, erstellen Sie dies einfach als Wrapper-Skript:
backend-tunnel mysql-workbench
backend-tunnel bash
quelle
-f
kann diessh
Sitzung auch dann fortgesetzt werden, wenn die Terminalsitzung geschlossen ist, im Gegensatz zum Verschieben in den Hintergrund. Daspid
Verwendenps aux | grep ssh | grep <LOCAL-PORT>
ist ziemlich trivial.-f
hat auch den Vorteil, dass der lokale Benutzer bei Bedarf zur Eingabe des Anmeldekennworts aufgefordert wird. Wenn Sie verwenden&
, wird diese Eingabeaufforderung vom Benutzer nur angezeigt, wenn er den Prozess in den Vordergrund stellt (zfg
. B. mithilfe von ).