En supposant que vous ayez exécuté cette commande: ssh -f user@mysql-server.com -L 3306:mysql-server.com:3306 -Ncomme 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 sshpage)
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 sshen 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 localhostlieu 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 sshpage):
[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:3306lie le locale le port 3306au 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.compuis se connecte au mysql-server.comport 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 sshprocessus 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 pidde ssh -f ... -L 3306:mysql-server.com:3306 -N, et kill <pid>. (Ou peut-être kill -9 <pid>; j'oublie si ça killmarche). Cela a le bel avantage de ne pas tuer toutes vos autres sshconnexions; 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 localhostle port 33060, qui se connecterait sur mysql-server.comle port 3306. Vous pouvez évidemment toujours vous connecter sur localhostle port 3306, vous pouvez donc toujours utiliser le mysqlserveur local .