# Manual paso a paso para realizar tunneling SSH para conexiones MySQL en modo localhost

- Link: https://binariocero.com/linux/manual-paso-a-paso-para-realizar-tunneling-ssh-para-conexiones-mysql-en-modo-localhost
- Published: 2024-12-05T10:41:06+01:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

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**

 1. **Servidor de base de datos MySQL.** Asegúrate de que la base de datos MySQL está
    funcionando en el servidor remoto.
 2. **Acceso SSH al servidor remoto.** Confirma que puedes conectarte al servidor que
    aloja la base de datos MySQL.
 3. **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:

    ```wp-block-preformatted
    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:

    ```wp-block-preformatted
    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:

    ```wp-block-preformatted
    mysql -h 127.0.0.1 -P 3307 -u usuario_mysql -p
    ```

Aquí:

 * `-h 127.0.0.1`: Especifica que te conectarás a `localhost` (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:

    ```wp-block-preformatted
    Host mysql-tunnel    HostName ip_servidor    User usuario_remoto    LocalForward 3307 127.0.0.1:3306
    ```

Ahora puedes establecer el túnel simplemente con:

    ```wp-block-preformatted
    ssh mysql-tunnel
    ```

### **Paso 6: Solución de problemas**

Si algo no funciona, revisa:

 1. **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.
 2. **Firewall:** Confirma que el firewall del servidor permite conexiones a MySQL.
 3. **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:

    ```wp-block-preformatted
    #!/bin/bash# VariablesREMOTE_USER="usuario_remoto"REMOTE_HOST="ip_servidor"LOCAL_PORT=3307REMOTE_PORT=3306# Crear el túnel SSHssh -f -N -L $LOCAL_PORT:127.0.0.1:$REMOTE_PORT $REMOTE_USER@$REMOTE_HOSTecho "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.
