Suponiendo que corrió este comando: ssh -f [email protected] -L 3306:mysql-server.com:3306 -N
como se describe en el post se conectó.
un desglose del comando:
ssh
: eso es bastante auto-explicativo. Invoca al ssh
.
-f
: (Desde la página man ssh
)
solicitudes ssh para ir a fondo justo antes de la ejecución del comando. Esto es útil si ssh va a pedir contraseñas o frases de contraseña, pero el usuario lo quiere en segundo plano.
Esencialmente, envíe ssh
al fondo una vez que haya ingresado las contraseñas para establecer la conexión; le devuelve la solicitud de shell al localhost
en lugar de iniciar sesión en remote-host
.
[email protected]
: el servidor remoto en el que desea iniciar sesión.
-L 3306:mysql-server.com:3306
: Este es el tema interesante. -L
(desde la página man ssh
):
[bind_address:] puerto: host: hostport Especifica que ese puerto, en el host local (cliente) es ser enviado al host y el puerto dado en el control remoto lado.
Así -L 3306:mysql-server.com:3306
une el puerto local de 3306
al puerto remoto 3306
en el host mysql-server.com
.
Cuando se conecta a locales puerto 3306
, la conexión se reenvía a través del canal seguro a mysql-server.com
. El host remoto , mysql-server.com
se conecta a mysql-server.com
en el puerto 3306
.
-N
: no ejecute un comando. Esto es útil para "solo reenviar puertos" (citando la página man).
¿Este comando afecta nada en el servidor?
Sí, se establece una conexión entre localhost y mysql-server.com en el puerto 3306.
Y ¿Cómo se cierra este túnel ...
Si ha utilizado -f
, se dará cuenta de que el proceso que ha abierto ssh
cabezas en el fondo. El mejor método para cerrarlo es ejecutar ps aux | grep 3306
, encontrar pid
del ssh -f ... -L 3306:mysql-server.com:3306 -N
y kill <pid>
. (O tal vez kill -9 <pid>
; Se me olvida si funciona kill
). Eso tiene el hermoso beneficio de no que mata todas sus otras conexiones ssh
; si tienes más de uno, reestablecerlos puede ser un leve ... dolor.
... porque ahora no puedo usar mi mysql local correctamente.
Esto se debe a que has efectivamente "capturado" el proceso local de mysql
y procesados de todo el tráfico que intenta conectarse a él, fuera de la distanciamysql
proceso. Una solución mucho más agradable sería no utilizar el puerto local 3306 en el puerto de avance. Use algo que no se usa, como 33060. (Los números más altos generalmente son menos utilizados, es muy común usar una combinación como esta: "2525-> 25", "8080-> 80", "33060-> 3306" o similar. Hace recordar algo más fácil).
Por lo tanto, si se ha utilizado ssh -f [email protected] -L 33060:mysql-server.com:3306 -N
, a continuación, que le apunta su Zend conectar a MySQL función para localhost
en el puerto 33060
, que conectaría a mysql-server.com
en el puerto 3306
. Obviamente, todavía puede conectarse al localhost
en el puerto 3306
, por lo que aún puede utilizar el servidor local mysql
.
Mejor explicación que leo en mucho tiempo. Esto es muy útil cuando se accede a una base de datos remota desde entornos instalados localmente, como R, por ejemplo. Funciona bien con autenticación de clave pública/privada. No con contraseñas porque no encontré la manera de pasar las contraseñas. –
Aceptando esta respuesta como mejor debido a la explicación completa. – Jacob
Esta es una gran respuesta. ¡Muy minucioso! – colefner