Suponiendo que ejecutó este comando: ssh -f user@mysql-server.com -L 3306:mysql-server.com:3306 -N
como se describe en la publicación que vinculó.
Un desglose del comando:
ssh
: eso se explica por sí mismo. Invoca ssh
.
-f
: (De la man ssh
página)
Solicita a ssh que pase a segundo plano justo antes de la ejecución del comando. Esto es útil si ssh va a solicitar contraseñas o frases de contraseña, pero el usuario las quiere en segundo plano.
Esencialmente, envíe ssh
a segundo plano una vez que haya ingresado las contraseñas para establecer la conexión; le devuelve el indicador de shell en en localhost
lugar de iniciar sesión en remote-host
.
user@mysql-server.com
: el servidor remoto en el que le gustaría iniciar sesión.
-L 3306:mysql-server.com:3306
: Esta es la parte interesante. -L
(de la man ssh
página):
[bind_address:] port: host: hostport Especifica que el puerto dado en el host local (cliente) se reenviará al host y puerto especificados en el lado remoto.
Así -L 3306:mysql-server.com:3306
se une el local de puerto 3306
para el puerto remoto 3306
en el host mysql-server.com
.
Cuando se conecta al puerto local3306
, la conexión se reenvía a través del canal seguro a mysql-server.com
. El host remoto , mysql-server.com
luego se conecta al mysql-server.com
puerto 3306
.
-N
: no ejecute un comando. Esto es útil para "solo reenviar puertos" (citando la página del manual).
¿Este comando afecta algo en el servidor?
Sí, establece una conexión entre localhost y mysql-server.com en el puerto 3306 .
¿Y cómo cierro este túnel ...
Si lo ha usado -f
, notará que el ssh
proceso que ha abierto va en segundo plano. El método más agradable para cerrarlo es ejecutar ps aux | grep 3306
, encontrar el pid
de ssh -f ... -L 3306:mysql-server.com:3306 -N
y kill <pid>
. (O tal vez kill -9 <pid>
; se me olvida si simplemente kill
funciona). Eso tiene el hermoso beneficio de no matar todas tus otras ssh
conexiones; si tiene más de uno, restablecerlos puede ser un leve ... dolor.
... porque ahora no puedo usar mi mysql local correctamente.
Esto se debe a que efectivamente ha "capturado" el proceso local mysql
y reenviado cualquier tráfico que intente conectarse a él, al proceso remoto mysql
. Una solución mucho mejor sería no usar el puerto local 3306 en el reenvío de puertos. Usa algo que no se use, como 33060. (Los números más altos generalmente se usan menos; es bastante común reenviar una combinación como esta: "2525-> 25", "8080-> 80", "33060-> 3306" o similar. Hace que recordar sea un poco más fácil).
Entonces, si lo usara ssh -f user@mysql-server.com -L 33060:mysql-server.com:3306 -N
, apuntaría su función Zend connect-to-mysql al localhost
puerto 33060
, que se conectaría al mysql-server.com
puerto 3306
. Obviamente, aún puede conectarse a localhost
un puerto 3306
, por lo que aún puede usar el mysql
servidor local .