Tunelización de MySQL SSH

MySQL SSH tunelización ¿Qué es?


Este artículo en Inglés.


El túnel SSH es un método que nos permite crear conexiones (túnel) confiables y segurasentre nuestro ordenador y un servidor remoto. La conexión consiste en crear un link entre nuestro ordenador y el servidor remoto por medio de reenvío de puertos (port forwarding).

La idea es reenviar todo el tráfico desde un puerto local hacia el túnel que va a comunicar con el servidor el puerto del servidor.

Esto es particularmente útil cuando se habla de proceso de desarrollo, dado que es posible que sea necesario interactuar con una base de datos hosteada de manera remota, para éste propósito necesitaremos mantener una conexión confiable entre nuestro ordenador (en el cual estaremos corriendo nuestro cliente de MySql) y el host de la base de datos (la fuente de donde se alimentará nuestro cliente de MySql). Básicamente haremos que nuestro ordenador crea que estamos sirviendo la base de datos localmente.

Este procedimiento nos permite usar la base de datos remota a través de reenvío de puertos (evitando la exposición de los mismos). Esto nos ayuda a tener una conexión encriptada al momento de traficar data hacia/desde el servidor de la base de datos.

Algunos clientes gratuitos open source de MySql disponibles en mac/linux:

  • MySql workbench: Linux/mac

  • Sequel Pro: Mac

  • PHPMyAdmin: Linux/mac/windows

  • Neor Profile SQL: Linux/mac/windows

Configuración de túnel SSH con MySql

Primero mostraré cómo crear el túnel de manera manual y luego con un cliente de MySql

NOTA: Para tener un acceso más fácil al túnel SSH, posiblemente necesites agregar tu huella ssh (ssh-key fingertip) al servidor remoto.

Creación de un túnel SSH de manera manual

Para crear un túnel SSH de manera manual necesitas correr los siguientes comandos en tu máquina linux/mac.

ssh -L [puerto local]:[host de la base de datos]:[puerto remoto] \ [usuario]@[host remoto]

Ejemplo:

ssh -L 3306:127.0.0.1:3306 \ usuario_remoto@192.169.0.10

Donde:

[puerto local = 3306]: Es el puerto local que se abrirá para comunicarse con el servidor remoto (el tráfico será tomado desde este puerto y reenviado a [host de la base de datos]:[puerto] por medio del túnel SSH). Use 3306 (que es el puerto por defecto) para conexiones MySql o cualquier otro que haya configurado.

[host de la base de datos = 127.0.0.1]: La dirección donde la base de datos está alojada. Si la dirección del host de la base de datos es la misma que [host remoto = 192.169.0.10], entonces sólo necesitamos usar 127.0.0.1 aquí para hacer una referencia a si mismo.

[puerto remoto = 3306]: El puerto que estará abierto en el host remoto para ser conectado a través del túnel SSH.

[usuario = usuario_remoto]: El nombre de usario que usaremos para autenticarnos en el servidor remoto.

[host remoto = 192.169.0.10]: Dominio o dirección IP donde la base de data remota está alojada.

Desde este punto si hemos configurado el puerto 3306 (o lo que sea que se haya configurado en la configuración del túnel), todas las conexiones que pasen a travéz del puerto local, usarán el tunnel.

Ya podemos usar nuestro túnel SSH para interactuar desde nuestro MySql local con una fuente de data remota.

Create an SSH tunnel for MySql workbench

A mucha gente podría no serle agradable una solución que implica interfaces de línea de comandos para manipular bases de datos, a parte, trabajar con un cliente gráfico de base de datos podría hacer las cosas más fáciles y rápidas. Por eso es muy útil configurar nuestro cliente de MySql para trabajar con éste conexión de túnel SSH. Estaremos usando MySql Wokbench para éste artículo.

MySql WorkBench puede ser obtenido de este enlace.

Para la configuración de este cliente, vaya a Manage server connections.

Aparecerá una pantalla como esta:

picture

En la sección de la izquierda, seleccione una conección.

En la tab de connection, como puede ver en la anterior imagen, hay unas opciones configurables como:

  • SSH host name: El nombre del servidor donde la base de datos está alojada.

  • SSH username: El usuario para acceder al servidor de manera autenticada.

  • SSH password: La contraseña con la que el usuario se va a autenticar.

  • SSH key file: El camino (path) hacia la ubicación del archivo llave SSH para garantizar acceso cuando sea necesario conectar con el servidor.

Estas opciones lucen casi como las requeridas para la configuración manual que hicimos recientemente, Sólo necesitaremos llenar esos campos para obtener la configuración requerida y tener disponible nuestra conexión de túnel SSH con el cliente de MySql Workbench.

Conclusiones

Cuando necesitemos conectarnos a una base de datos hosteada de manera remota usando una conexión confiable entre nuestra máquina y el servidor remoto, podemos usar túneles SSH que maneja una conexión segura entre nuestro ordenador y el servidor de la base de datos por medio de reenvío de puertos (evitando la exposición de los mismos).

Esto puede ser configurado de manera manual al número de puerto configurado para MySql (3306 por defecto) y desde ahí, todas las conexiones locales que ocupen el mismo, serán reenviadas directamente hacia el túnel SSH. Si queremos utilizar un cliente gráfico de MySql como Workbench, podemos usar esas mismas opciones configuradas manualmente a través del asistente de configuración Manage server connections.

Referencias:

https://help.ubuntu.com/community/SSH/OpenSSH/PortForwarding

https://support.cloud.engineyard.com/hc/en-us/articles/205408088-Access-Your-Database-Remotely-Through-an-SSH-Tunnel

https://mediatemple.net/community/products/dv/204403884/tunnel-local-mysql-server-through-ssh

https://hostpresto.com/community/tutorials/how-to-connect-to-a-remote-mysql-server-via-an-ssh-tunnel/

http://dev.mysql.com/doc/workbench/en/wb-mysql-connections-methods-ssh.html



Article by: Victor Rivas at Bixlabs, Uruguay