SSH tunneling es una técnica poderosa que permite acceder de forma segura a servicios que están detrás de un firewall o red interna. Aquí aprenderás cómo configurar un túnel SSH para conectar a una base de datos MySQL de forma segura como si estuviera en localhost
.
Paso 1: Requisitos previos
- Servidor de base de datos MySQL. Asegúrate de que la base de datos MySQL está funcionando en el servidor remoto.
- Acceso SSH al servidor remoto. Confirma que puedes conectarte al servidor que aloja la base de datos MySQL.
- Cliente MySQL instalado. En tu máquina local, verifica que tienes un cliente MySQL instalado con:
mysql --version
Paso 2: Conexión básica al servidor remoto
Primero, verifica que puedes acceder al servidor remoto mediante SSH:
ssh usuario_remoto@ip_servidor
Si te conectas correctamente, puedes proceder.
Paso 3: Configuración del túnel SSH
Un túnel SSH redirige un puerto de tu máquina local hacia el puerto donde MySQL escucha en el servidor remoto (por defecto, 3306).
Comando básico
Ejecuta este comando para crear el túnel:
ssh -L 3307:127.0.0.1:3306 usuario_remoto@ip_servidor
Aquí:
-L
: Especifica el reenvío de puerto local.3307
: Es el puerto local que usarás para conectarte (puedes cambiarlo si ya está en uso).127.0.0.1:3306
: Indica que redirigirás al puerto MySQL en el servidor remoto.usuario_remoto@ip_servidor
: Tus credenciales SSH para el servidor remoto.
Mantén esta conexión abierta mientras trabajas.
Paso 4: Conectarte a MySQL desde tu máquina local
Ahora puedes conectarte a MySQL usando el túnel SSH. En una nueva terminal, usa tu cliente MySQL local con el siguiente comando:
mysql -h 127.0.0.1 -P 3307 -u usuario_mysql -p
Aquí:
-h 127.0.0.1
: Especifica que te conectarás alocalhost
(tu máquina local).-P 3307
: Es el puerto redirigido (asegúrate de que coincida con el del túnel).-u usuario_mysql
: Es el usuario de la base de datos.-p
: Solicita la contraseña de MySQL.
Introduce la contraseña y deberías estar conectado.
Paso 5: Configuración opcional del archivo SSH
Para simplificar futuros accesos, puedes configurar un túnel persistente en tu archivo ~/.ssh/config
. Añade algo como esto:
Host mysql-tunnel
HostName ip_servidor
User usuario_remoto
LocalForward 3307 127.0.0.1:3306
Ahora puedes establecer el túnel simplemente con:
ssh mysql-tunnel
Paso 6: Solución de problemas
Si algo no funciona, revisa:
- Puertos abiertos: Asegúrate de que el puerto
3306
está accesible desde el servidor remoto. Puedes probarlo ejecutando:telnet 127.0.0.1 3306
en el servidor remoto. - Firewall: Confirma que el firewall del servidor permite conexiones a MySQL.
- Cliente MySQL: Si recibes errores al conectarte desde tu máquina local, verifica que el cliente MySQL puede acceder al puerto
3307
.
Paso 7: Automatización (opcional)
Puedes usar un script para crear y gestionar el túnel de forma sencilla:
#!/bin/bash
# Variables
REMOTE_USER="usuario_remoto"
REMOTE_HOST="ip_servidor"
LOCAL_PORT=3307
REMOTE_PORT=3306
# Crear el túnel SSH
ssh -f -N -L $LOCAL_PORT:127.0.0.1:$REMOTE_PORT $REMOTE_USER@$REMOTE_HOST
echo "Túnel SSH creado. Conéctate a MySQL usando localhost:$LOCAL_PORT"
Guarda este script como mysql_tunnel.sh
, hazlo ejecutable (chmod +x mysql_tunnel.sh
) y ejecútalo cuando lo necesites.
Paso 8: Conclusión
Con estos pasos, puedes conectarte de manera segura a un servidor MySQL remoto como si estuviera en localhost
. Este método es útil para desarrolladores, administradores de sistemas o cualquier persona que necesite acceder a bases de datos en redes protegidas.