En ocasiones es necesario acceder a servicios en otras máquinas como bases de datos que no están accesibles públicamente. Si con el cliente de base de datos quieres conectarte has de abrir un túnel ssh y a partir de ahí indicar el puerto al que conectar. Con un cliente de base de datos es suficiente, pero qué ocurre cuando estás programando y necesitas que tu aplicación tenga conexión con esa base de datos. No siempre es sencillo en tu aplicación configurarte un túnel SSH.
Si usas Linux hay un comando muy sencillo que te permite hacer esto de forma muy sencilla. En un terminal ejecutaremos lo siguiente:
ssh -L 3333:localhost:5432 usuario@dominioservidorremoto.es -N
Este comando abrirá en tu máquina local el puerto 3333 que enviará el tráfico a tu servidor remoto donde esté ubicada la base de datos. En el servidor remoto la base de datos está ubicada en el puerto 5432. Es importante no cerrar la terminal ya que mientras esté el proceso en ejecución el tráfico será redirigido.
A partir de aquí, en tu aplicación deberás configurar el usuario y contraseña de acceso de la base de datos e indicarás como host «localhost» (o 127.0.0.1 según aplicaciones) y el puerto 3333
Utilizar máquina intermediaria para usar su IP
Es habitual que algunos servicios externos estén restringido el acceso a IPs autorizadas. Si la IP autorizada es la de tu servidor en producción, y no tienes otra forma para tener la IP de tu puesto de trabajo dada de alta, por el motivo que sea, puedes usar la misma estrategia de redirigir uno de tus puertos para conseguir el efecto deseado.
En este ejemplo vamos a conectarnos a un SFTP de un proveedor, que ha autorizado la IP de nuestro de servidor de producción llamado «servidor.produccion.es». En el terminal ejecutaremos lo siguiente:
ssh -f -N -L 2222:sftp.dominio.com:22 ubuntu@servidor.produccion.es
A diferencia del comando anterior, la terminal no quedará bloquedada por lo que puedes cerrarla sin riesgo. En este caso, el puerto 2222 de nuestra máquina local conectará a servidor.produccion.es y desde ahí, accederá a sftp.dominio.com en el puerto 22.
Como se puede comprobar el comando es muy sencillo y sirve para cualquier tipo de servicio. Obviamente una VPN en nuestra máquina nos puede quitar de muchos problemas pero siempre es la solución cuando se trabaja con servidores remotos.