En supposant que vous ayez exécuté cette commande: ssh -f user@mysql-server.com -L 3306:mysql-server.com:3306 -N
comme décrit dans le message que vous avez lié.
Une panne de la commande:
ssh
: c'est assez explicite. Invoque ssh
.
-f
: (À partir de la man ssh
page)
Demande à ssh de passer en arrière-plan juste avant l'exécution de la commande. Ceci est utile si ssh va demander des mots de passe ou des phrases de passe, mais que l'utilisateur le souhaite en arrière-plan.
Essentiellement, envoyez ssh
en arrière-plan une fois que vous avez entré un mot de passe pour établir la connexion; il vous renvoie l'invite du shell au localhost
lieu de vous connecter à remote-host
.
user@mysql-server.com
: le serveur distant auquel vous souhaitez vous connecter.
-L 3306:mysql-server.com:3306
: C'est le peu intéressant. -L
(à partir de la man ssh
page):
[bind_address:] port: host: hostport Spécifie que le port donné sur l'hôte local (client) doit être transféré vers l'hôte et le port donnés du côté distant.
Ainsi , -L 3306:mysql-server.com:3306
lie le locale le port 3306
au port distant 3306
sur l' hôte mysql-server.com
.
Lorsque vous vous connectez au port local3306
, la connexion est transférée via le canal sécurisé vers mysql-server.com
. L' hôte distant , mysql-server.com
puis se connecte au mysql-server.com
port 3306
.
-N
: n'exécute pas de commande. Ceci est utile pour "simplement transmettre les ports" (en citant la page de manuel).
Cette commande affecte-t-elle quelque chose sur le serveur?
Oui, il établit une connexion entre localhost et mysql-server.com sur le port 3306 .
Et comment fermer ce tunnel ...
Si vous avez utilisé -f
, vous remarquerez que le ssh
processus que vous avez ouvert se retrouve en arrière-plan. La meilleure méthode pour le fermer consiste à exécuter ps aux | grep 3306
, trouver le fichier pid
de ssh -f ... -L 3306:mysql-server.com:3306 -N
, et kill <pid>
. (Ou peut-être kill -9 <pid>
; j'oublie si ça kill
marche). Cela a le bel avantage de ne pas tuer toutes vos autres ssh
connexions; si vous en avez plus d'un, les rétablir peut être une légère ... douleur.
... parce que maintenant je ne peux pas utiliser correctement mon mysql local.
C'est parce que vous avez effectivement «capturé» le processus local mysql
et transféré tout trafic qui tente de s'y connecter, vers le processus distant mysql
. Une solution bien plus intéressante serait de ne pas utiliser le port local 3306 dans le transfert de port. Utilisez quelque chose qui n'est pas utilisé, comme 33060. (Les nombres plus élevés sont généralement moins utilisés; il est assez courant de transférer une combinaison comme celle-ci: "2525-> 25", "8080-> 80", "33060-> 3306" ou similaire. Facilite légèrement la mémorisation).
Donc, si vous utilisiez ssh -f user@mysql-server.com -L 33060:mysql-server.com:3306 -N
, vous pointeriez alors votre fonction Zend connect-to-mysql sur localhost
le port 33060
, qui se connecterait sur mysql-server.com
le port 3306
. Vous pouvez évidemment toujours vous connecter sur localhost
le port 3306
, vous pouvez donc toujours utiliser le mysql
serveur local .