Solución de túnel SSH
Configure un túnel SSH a su servidor de base de datos MySQL (a través de un proxy Jumpbox por seguridad).
(A) Herramientas GUI
En función de sus requisitos, puede utilizar un cliente GUI MySQL con compatibilidad con túneles SSH integrado, como Visual Studio Code. Reenviar un puerto/crear túnel SSH , TablePlus o usa PuTTY para configurar local redirección de puertos.
En macOS, me gusta Secure Pipes o TablePlus .
(B) Línea de comando
Paso 1.
ssh -fNg -L 3307:10.3.1.55:3306 [email protected]
La clave aquí es '-L' interruptor que le dice a ssh que estamos solicitando local redirección de puertos.
Elegí usar el puerto 3307 sobre. Todo el tráfico en mi local la máquina dirigida a este puerto ahora será 'reenviada por puerto' a través de mi cliente ssh al servidor ssh ejecutándose en el host en la dirección ssh-jumpbox.com
.
El servidor proxy Jumpbox ssh descifrará el tráfico y establecerá una conexión de red a su servidor de base de datos MySQL en su nombre, 10.3.1.55:3306
, en este caso. El servidor de la base de datos MySQL ve la conexión proveniente de la dirección de red interna de su Jumpbox.
Sintaxis de reenvío de puerto local
La sintaxis es un poco complicada pero puede verse como:
<local_workstation_port>:<database_server_addr_remote_end_of_tunnel>:<database_server_port_remote_end> [email protected]_proxy_host.com
Si está interesado en los otros conmutadores, son:
-f (ir al fondo)
-N (no ejecutar un comando remoto)
-g (permitir que los hosts remotos se conecten a los puertos reenviados locales)
Autenticación de clave privada, agregue el interruptor (-i) al anterior:
-i /ruta/a/clave-privada
Paso 2.
Dígale a su cliente MySQL local que se conecte a través de su túnel SSH a través del puerto local 3307 en su máquina (-h 127.0.0.1) que ahora reenvía todo el tráfico que se le envía a través del túnel SSH que estableció en el paso 1.
mysql -h 127.0.0.1 -P 3307 -u dbuser -p passphrase
El intercambio de datos entre el cliente y el servidor ahora se envía a través de la conexión SSH cifrada y es seguro.
Nota de seguridad
No haga un túnel directamente a su servidor de base de datos. Tener un servidor de base de datos accesible directamente desde Internet es una gran responsabilidad de seguridad. Haga que la dirección de destino del túnel sea la dirección de Internet de su servidor Jumpbox/Bastión (vea el ejemplo en el paso 1) y su base de datos se dirija a la interna Dirección IP de su servidor de base de datos en la red remota. SSH hará el resto.
Paso 3.
Ahora conecte su aplicación PHP con:
<?php
$smysql = mysql_connect( "127.0.0.1:3307", "dbuser", "passphrase" );
mysql_select_db( "db", $smysql );
?>
Crédito a Chris Snyder's gran artículo detallando la tunelización de la línea de comando ssh para la conectividad de MySQL.