Conectate a MySQL remotamente por un SSH Tunnel. Debido a las normas PCI DSS no es permitido conectar directamente a MySQL por razones de seguridad, como puede observarse en este escaneo de la red mediante un proveedor de escaneo aprobado ("ASV")
Pero esto no te impide conectarte remotamente a MySQL en forma segura.
Para ello lo que debes hacer es conectarte por un tunel SSH y desde ahí a MySQL como si se tratara de una conexión local usando a localhost como host/servidor de la base de datos.
Por pasos:
1. En cPanel crea una nueva SSH Key y autorízala, esta será usada para conectar al servidor por SSH, para generar y autorizar la SSH key te puedes apoyar de este tutorial de SFTP
2. En el cliente que usas para conectar a la base de datos le vas a indicar que use un tunel SSH y para los datos de conexión a MySQL use localhost como host/servidor, el usuario, contraseña, nombre de base de datos que has creado en cPanel -> Bases de datos MySQL. Aqui te vamos a dejar los manuales de algunos clientes/lenguajes para que revises como configurar el tunel SSH y conectar al servidor de base de datos.
- MySQL Workbench: https://dev.mysql.com/doc/workbench/en/wb-mysql-connections-methods-ssh.html
- PHP: Esto solo aplica si el código no se ejecuta en el mismo Hosting, sino en forma remota en otro Hosting/Dispositivo pero requiere conectar al MySQL remotamente. Adapta este código y agregalo para que se ejecute antes de la conexión a MySQL, a la conexión a MySQL solo le cambias el puerto de 3306 a 3307:
$opensshprivatekey = escapeshellarg("opensshprivatekey.txt");// Aqui configuras donde está la key
//Desde aquí solo se requiere si PHP será ejecutado en Windows
$runninguser = get_current_user();
shell_exec("TakeOwn /F $opensshprivatekey 2>&1");
shell_exec("icacls $opensshprivatekey /reset 2>&1");
shell_exec("icacls $opensshprivatekey /inheritance:r 2>&1");
shell_exec("Icacls $opensshprivatekey /c /t /Grant $runninguser:F 2>&1");
//Fin del código que solo se requiere si PHP es ejecutado en Windows
//la siguiente línea si es Windows
$command = "start /B ssh -i $opensshprivatekey -o StrictHostKeyChecking=no -vg -L 3307:127.0.0.1:3306 TUUSUARIO@server3.hostingfacil.co sleep 10 > NUL";//TUUSUARIO lo reemplazas por el usuario de cPanel. server3.hostingfacil.co por el servidor donde está tu cuenta.
//Esta línea si no es Windows
$command = "ssh -i $opensshprivatekey -o StrictHostKeyChecking=no -vg -L 3307:127.0.0.1:3306 TUUSUARIO@server3.hostingfacil.co sleep 10 &> /dev/null &";//TUUSUARIO lo reemplazas por el usuario de cPanel. server3.hostingfacil.co por el servidor donde está tu cuenta.
pclose( popen( $command, 'r' ) ); - C++ https://www.libssh2.org/examples/direct_tcpip.html
- Javascript: https://www.npmjs.com/package/mysql-ssh2
- Python: https://stackoverflow.com/a/51116269
- Java: Con este ejemplo, pero no usando SSH Password, sino SSH key: https://stackoverflow.com/a/14136488
- .NET Con esta libreria https://github.com/sshnet/SSH.NET y guiandote con este código, solo que no conectas con SSH Password, sino SSH key.
- Si el cliente / lenguaje de programación que usas no lo hemos mencionado aquí, es cuestión de buscar en Google, por ejemplo VB.net SSH Tunnel MySQL
- En caso tengas inconvenientes intentando conectar prueba lo siguiente:
- Usando la SSH Key que generaste en el paso #1 conecta via SFTP usando por ejemplo Filezilla guiandote con el mismo tutorial, si la conexión no es exitosa, verifica que el usuario, servidor/hostname, SSH Key y puerto esté correcto. Si conecta, indica que los datos de conexión SSH están correctos.
- Conecta a MySQL desde cPanel -> Terminal, por ejemplo escribe
mysql -h localhost -u USUARIO -p DATABASE
Al presionar Enter, digita ó pega con click derecho -> pegar la contraseña, esta no se verá en pantalla, y luego presiona enter
USUARIO lo reemplazas por el usuario que creaste en cPanel -> Base de datos MySQL
DATABASE por la base de datos que creaste en cPanel -> Base de datos MySQL
la contraseña es la que le asignaste al usuario MySQL al crearlo en cPanel -> Base de datos MySQL
Si te conecta (No sale error), indica que los datos de acceso a MySQL están correctos.
Si habiendo verificado que los datos de acceso SSH y MySQL están correctos, se trata de un error de programación, la sugerencia sería hacer debug para encontrar el texto exacto de error y así poder saber si la falla está en la creación del SSH Tunnel o también conocido como SSH Forward o en la conexión a MySQL usando dicho tunel.
Con esta conexión a MySQL por medio de SSH la información que viaja por Internet así la intercepten no será posible que la puedan leer/conocer, gracias al nivel de cifrado seguro y moderno que maneja SSH, que podemos decir que es el protocolo más auditado del mundo, lo que lo hace muy seguro cuando se configura correctamente sus ciphers y seguridad en general.