QGIS carece de la opción de crear túneles SSH a nivel de aplicación. Vamos a ver cómo hacer uno a nivel de sistema para que esto no sea un impedimento a la hora de conectarnos a bases de datos remotas.
Supongamos que queremos acceder a una base de datos espacial alojada en la nube mediante nuestro GIS de escritorio favorito. La manera mas simple y directa que conocemos es configurar en el propio GIS los parámetros de conexión utilizando la IP del servidor y el puerto de acceso a la base de datos. Pero el administrador de sistemas nos dice que por seguridad no puede abrir el puerto de PostgreSQL en el cortafuegos del servidor. La solución aquí es utilizar un túnel SSH, que en definitiva no es más que convertir un servicio remoto en un servicio local.
En este artículo veremos cómo crear un túnel SSH de este tipo que permita conectar QGIS con un base de datos PostGIS remota a través de un mecanismo de reenvío de puertos SSH (port forwarding) denominado SSH Tunneling, una alternativa segura de envío de información entre cliente y servidor en la que toda la información enviada y recibida va encriptada. En nuestro caso nos permitirá conectar de manera segura una máquina cliente con QGIS a una la máquina servidor que alberga la base de datos.
¿Qué es un túnel SSH?
SSH (Secure SHell) es un protocolo que permite conectarse de forma segura entre una máquina cliente y un servidor en el que toda la información viaja cifrada (a diferencia de otros sistemas menos seguros como Telnet). Hoy en día es una herramienta esencial para administrar servidores remotos.
Un túnel SSH es un método para crear una conexión SSH cifrada entre un cliente y una máquina servidor a través de la cual se pueden reenviar los puertos de servicios. Dado que el tráfico está encriptado, es bastante seguro conectarse a un servidor restringido para administrar una base de datos o usar cualquier otro servicio que necesitemos sin abrir un puerto en el firewall.

Creando un túnel SSH para QGIS
Algunas aplicaciones clientes, como por ejemplo pgAdmin o DBeaver, ya contemplan estas situaciones y facilitan la creación de este tipo de conexiones seguras en su propia interface. No es el caso de QGIS, que a fecha de publicación de este artículo no dispone de la opción de crear un túnel SSH para conectarse a base de datos remotas dentro de la propia aplicación.
Afortunadamente disponemos de alternativas y crear este tipo de túneles es más fácil de lo que piensas.

Veamos un ejemplo. Supongamos que queremos conectarnos desde QGIS a un servidor remoto a través del puerto estándar de PostgreSQL 5432 y esto no nos está permitido por el firewall del servidor. Crearemos entonces un túnel SSH desde el puerto local 5555 (o cualquier otro libre) de nuestro equipo. Luego simplemente configuraremos QGIS para conectarnos a este puerto local con los parámetros de conexión de la base de datos.
Te puede parece un proceso confuso, pero quédate con la idea de que esto simplemente significa que cada vez que QGIS se conecte a este puerto local de nuestro equipo en realidad está accediendo a un puerto concreto del servidor remoto.
Lo primero que necesitamos es un cliente SSH. En Windows se ha venido utilizando tradicionalmente programas de terceros como Putty, pero desde Windows 10 versión 1803 ya viene con un cliente activado por defecto para utilizarlo desde PowerShell o CMD. Otras plataformas como Linux o macOS ya traían un cliente SSH instalado desde hace tiempo. En cualquiera de los casos abrimos una consola de comandos en nuestro equipo y escribimos un comando con la siguiente estructura:
ssh -L <local_port>:localhost:<remote_port> <user>@<remote_host>
El siguiente sería un ejemplo concreto:
ssh -L 5555:localhost:5432 foouser@203.0.113.0
Aquí mediante el parámetro -L
del comando construimos el túnel. Indicamos que nuestro cliente SSH reenvíe el tráfico desde el puerto 5555 del equipo local al puerto 5432 del servidor remoto. A continuación indicamos el usuario del equipo remoto (foouser) con el que nos conectaremos al servidor y la IP pública o el hostname de este (203.0.113.0).
Seguidamente abrimos QGIS y realizamos una configuración básica de conexión a una base de datos PostGIS pero conectándonos a través del puerto local (en nuestro ejemplo el 5555 de localhost), desde donde direccionamos las peticiones al servidor. Escribiremos el nombre de la base de datos remota y el nombre de usuario y contraseña con el que accederemos a ella.

Una vez hecho esto, cuando desde QGIS accedamos a localhost:5555 en realidad estaremos accediendo a 203.0.113.0:5432 en el servidor.
Es importante recordar que este túnel es necesario tenerle siempre abierto mientras se usa QGIS. En el momento en que matemos el proceso SSH se cerrará el túnel y el GIS se desconectará de la base de datos.
¿Quieres comentarnos algo? Adelante!