it-swarm.com.de

Wie schließe ich diesen SSH-Tunnel?

Ich habe einen SSH-Tunnel wie in diesem Beitrag beschrieben geöffnet: Zend_Db: Wie kann ich über einen SSH-Tunnel eine Verbindung zu einer MySQL-Datenbank herstellen?

Aber jetzt weiß ich nicht, was ich tatsächlich getan habe. Beeinflusst dieser Befehl etwas auf dem Server? Und wie schließe ich diesen Tunnel, weil ich mein lokales MySQL jetzt nicht richtig verwenden kann.

Ich benutze OSX Lion und der Server läuft unter Ubuntu 11.10.

80
Jacob

Angenommen, Sie haben den folgenden Befehl ausgeführt: ssh -f [email protected] -L 3306:mysql-server.com:3306 -N Wie in dem von Ihnen verknüpften Beitrag beschrieben.

Eine Aufschlüsselung des Befehls:

  1. ssh: das ist ziemlich selbsterklärend. Ruft ssh auf.
  2. -f: (Von der Seite man ssh)

    Fordert ssh auf, kurz vor der Befehlsausführung in den Hintergrund zu wechseln. Dies ist nützlich, wenn ssh nach Passwörtern oder Passphrasen fragt, der Benutzer dies jedoch im Hintergrund wünscht.

    Senden Sie im Wesentlichen ssh an den Hintergrund, sobald Sie Kennwörter eingegeben haben, um die Verbindung herzustellen. Es gibt Ihnen die Shell-Eingabeaufforderung unter localhost zurück, anstatt Sie bei remote-Host anzumelden.

  3. [email protected]: Der Remote-Server, bei dem Sie sich anmelden möchten.
  4. -L 3306:mysql-server.com:3306: Dies ist das interessante Stück. -L (Von der Seite man ssh):

    [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.

    Also bindet -L 3306:mysql-server.com:3306 Den lokalen Port 3306 An den entfernten Port 3306 Auf dem Host mysql-server.com.

    Wenn Sie eine Verbindung zum lokalen Port 3306 Herstellen, wird die Verbindung über den sicheren Kanal an mysql-server.com Weitergeleitet. Der entfernte Host mysql-server.com Stellt dann eine Verbindung zu mysql-server.com Am Port 3306 Her.

  5. -N: Führe keinen Befehl aus. Dies ist nützlich, um "nur Ports weiterzuleiten" (unter Angabe der Manpage).

Beeinflusst dieser Befehl etwas auf dem Server?

Ja, es wird eine Verbindung zwischen localhost und mysql-server.com hergestellt an Port 3306 .

Und wie schließe ich diesen Tunnel ...

Wenn Sie -f Verwendet haben, werden Sie feststellen, dass der ssh -Prozess, den Sie geöffnet haben, in den Hintergrund tritt. Die schönere Methode zum Schließen besteht darin, ps aux | grep 3306 Auszuführen, das pid des ssh -f ... -L 3306:mysql-server.com:3306 -N Und kill <pid> Zu suchen. (Oder vielleicht kill -9 <pid>; Ich vergesse, wenn nur kill funktioniert). Das hat den schönen Vorteil, dass nicht alle Ihre anderen ssh Verbindungen beendet werden; Wenn Sie mehr als eine haben, kann das Wiederherstellen ein leichter ... Schmerz sein.

... weil ich mein lokales MySQL jetzt nicht richtig nutzen kann.

Dies liegt daran, dass Sie den lokalen mysql -Prozess effektiv "erfasst" und den Datenverkehr, der versucht, eine Verbindung zu ihm herzustellen, weitergeleitet haben der entfernte mysql Prozess. Eine viel schönere Lösung wäre, keinen lokalen Port 3306 zu verwenden im Port-Forward. Verwenden Sie etwas, das nicht verwendet wird, wie z. B. 33060. (Höhere Zahlen werden im Allgemeinen weniger verwendet. Es ist ziemlich üblich, eine Kombination wie die folgende zu portieren: "2525-> 25", "8080-> 80", "33060-> 3306" oder ähnlich (Erleichtert das Erinnern etwas).

Wenn Sie also ssh -f [email protected] -L 33060:mysql-server.com:3306 -N Verwenden, verweisen Sie Ihre Zend-Funktion connect-to-mysql auf localhost am Port 33060, Der eine Verbindung zu mysql-server.com Herstellen würde. ] an Port 3306. Sie können natürlich weiterhin eine Verbindung zu localhost auf Port 3306 Herstellen, sodass Sie weiterhin den lokalen mysql Server verwenden können.

214
simont

Dadurch werden alle vom Terminal aus geöffneten ssh-Sitzungen abgebrochen.

Sudo killall ssh
39
thenetimp

Hinweis: Als Antwort hinzufügen, da Kommentare keine Codeblöcke unterstützen.

Meiner Meinung nach ist es besser, NICHT -f Zu verwenden und stattdessen den Prozess wie gewohnt mit & Zu hinterlegen. Das gibt dir die genaue PID, die du töten musst:

ssh -N -L1234:other:1234 server &
pid=$!
echo "waiting a few seconds to establish tunnel..."
sleep 5
... do yer stuff... launch mysql workbench whatever
echo "killing ssh tunnel $pid"
kill $pid

Oder noch besser, erstellen Sie dies einfach als Wrapper-Skript:

# backend-tunnel <your cmd line, possibly 'bash'>
ssh -N -L1234:other:1234 server &
pid=$!
echo "waiting a few seconds to establish tunnel..."
sleep 5
"[email protected]"
echo "killing ssh tunnel $pid"
kill $pid

backend-tunnel mysql-workbench

backend-tunnel bash

18
aaron