En supposant que vous ayez exécuté cette commande: ssh -f [email protected] -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
.
[email protected]
: 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 [email protected] -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 .
-9
n'est pas nécessaire pourkill
, étant donné que le processus fonctionne toujours bien ;-)Cela tuera toutes les sessions ssh que vous avez ouvertes depuis le terminal.
la source
killall ssh
est une commande plutôt imprudente. Je vous conseille de rechercher votre liste de processus (c'est-ps aux | grep ssh
à- dire comme suggéré par @simont ci-dessus) pour découvrir l'ID de processus spécifique de votre processus de tunnel ssh. Ensuite, vous pouvez tuer Pid spécifiquement.Remarque: l'ajout comme réponse car les commentaires ne prennent pas en charge les blocs de code.
À mon avis, il est préférable de NE PAS utiliser
-f
et de simplement définir le processus comme normal avec&
. Cela vous donnera le pid exact dont vous avez besoin pour tuer:Ou mieux encore, créez simplement ceci comme un script wrapper:
backend-tunnel mysql-workbench
backend-tunnel bash
la source
-f
permet à lassh
session de se poursuivre même lorsque la session du terminal est fermée, contrairement à la mise en arrière-plan. Saisir l'pid
utilisationps aux | grep ssh | grep <LOCAL-PORT>
est assez trivial.-f
également l'avantage d'inviter l'utilisateur local à entrer le mot de passe de connexion, si nécessaire. Si vous utilisez&
, cette invite n'est pas vue par l'utilisateur à moins qu'il ne place le processus au premier plan (par exemple en utilisantfg
).