Desarrollo y bases de datos

Conexión remota y segura al servidor MySQL

Revisado el 5 min de lectura mysql acceso remoto

Una conexión MySQL remota sin cifrar puede exponer las credenciales y los datos intercambiados. Un túnel SSH cifra el tramo entre tu equipo y el servidor sin necesitar una autorización directa para la IP de tu equipo en MySQL. El túnel no cierra el puerto público del servicio gestionado.

Esta guía utiliza el túnel SSH disponible en los planes con acceso SSH. Antes de continuar, activa y configura el acceso SSH con una clave Ed25519 protegida por una frase de paso.

Conexión desde un cliente MySQL con soporte SSH

Si tu cliente de bases de datos incluye soporte SSH, puede crear el túnel automáticamente. Al crear la conexión, configura por separado las pestañas de SSH y MySQL.

En la configuración SSH indica:

  • Servidor SSH: el nombre del servidor que figura en los datos técnicos del hosting. Evita un dominio detrás de un proxy o que apunte a otro proveedor
  • Puerto SSH: 93, salvo que los datos de tu servicio indiquen otro
  • Usuario SSH: tu usuario de cPanel
  • Autenticación: clave privada Ed25519
  • Clave privada: la ruta local de la clave cuya parte pública autorizaste en cPanel

Protege la clave con una frase de paso y utiliza el agente de claves o el almacén seguro del cliente para desbloquearla. No guardes la contraseña de cPanel en la conexión.

En la configuración MySQL indica:

  • Servidor MySQL: 127.0.0.1
  • Puerto MySQL: 3306
  • Usuario y contraseña MySQL: los de un usuario limitado a la base de datos necesaria
  • Base de datos: el nombre completo creado en cPanel

El cliente abrirá primero la sesión SSH y, dentro de ese túnel, conectará con MySQL en 127.0.0.1. Antes de aceptar la primera conexión SSH, comprueba la huella del servidor como explica la guía enlazada.

Crear el túnel desde la terminal de tu equipo

También puedes abrirlo con OpenSSH. Este comando se ejecuta en tu ordenador, no dentro del hosting. Sustituye servidor, usuario y ruta de la clave:

ssh -N -T -p 93 -i ~/.ssh/id_ed25519 \
  -o ExitOnForwardFailure=yes \
  -L 127.0.0.1:13306:127.0.0.1:3306 \
  usuario_cpanel@servidor.example.com

La terminal permanece abierta sin mostrar una shell remota. Mientras siga conectada, configura tu cliente MySQL con host 127.0.0.1, puerto 13306 y el usuario y contraseña de la base de datos. En este caso no actives además el túnel integrado del cliente.

La escucha se limita a tu propio equipo. No sustituyas 127.0.0.1 por 0.0.0.0, que podría permitir el uso del túnel desde otros equipos de la red. Al terminar, cierra la conexión MySQL y pulsa Ctrl+C en la terminal del túnel.

Si no conecta

  • Address already in use: el puerto local 13306 está ocupado. Elige otro puerto local libre y usa ese mismo número en el cliente MySQL.
  • Permission denied (publickey): comprueba el usuario SSH, la clave elegida y que su parte pública esté autorizada en la cuenta.
  • Administratively prohibited: el servidor rechaza el reenvío. Consulta con soporte si esa cuenta admite túneles; activar SSH no implica que cualquier modalidad de reenvío esté permitida.
  • Access denied de MySQL: el túnel puede estar funcionando. Revisa las credenciales MySQL y la asociación del usuario con la base, que son independientes de SSH.
  • Error de huella del servidor: verifica el cambio con soporte antes de reemplazar la huella guardada.

El cifrado SSH protege el tramo hasta el servidor SSH. Este ejemplo conecta desde allí al MySQL local; si el destino fuera otro servidor, tendrías que evaluar y proteger también ese tramo.

También te puede ayudar

¿Algo no cuadra o ha cambiado? Cuéntanoslo y lo revisamos.