Para cerrar el acceso a postgresql desde Internet y permitirlo solamente desde localhost, hace falta modificar la siguiente línea en el archivo /etc/postgresql/12/main/postgresql.conf
:
listen_addresses = 'localhost'
Después reencendem postgresql con sudo service postgresql restart
.
Para impedir el acceso con contraseña, hace falta cambiar la siguiente línea en el archivo /etc/ssh/sshd_config
:
PasswordAuthentication no
Después reencendem sshd con sudo service ssh restart
.
Entonces hace falta añadir la clave pública de ssh id_rsa.pub
al archivo ~/.ssh/authorized_keys
.
Creamos la configuración de SSH para que el acceso será fácil poniendo lo siguiente al archivo ~/.ssh/config
:
Host psig
Hostname myhost.com
Port 22
User myuser
IdentityFile ~/.ssh/id_rsa
LogLevel INFO
CheckHostIP yes
Luego hacemos un un tunel del puerto de postgresql remoto (5432) al puerto local 9999 desde la configuración ssh de la configuración psig:
ssh -L 9999:localhost:5432 psig
Mantenemos abierto esta sesión por la duración del acceso de pgadmin o Qgis.
Configuramos el acceso al servidor indicando host (localhost), port (9999), database (gis_ctbb) y usuario de la BDD:
Alternativa: En sistemas nuevos (depende del paquete python3-paramiko_2.4.1 o más nueva) es posible usar la configuración del tunel ssh de pgadmin. En este caso funciona añadir usuario y la llave privada al campo Identity file en la pestaña SSH tunnel:
Configuramos un servicio para postgresql añadiendo lo siguinte al archivo /etc/postgresql-common/pg_service.conf
:
[gis_ctbb_ssh]
host=localhost
port=9999
dbname=gis_ctbb
user=myuser
password=mypasswd
Luego creamos una nueva conexción de PostGIS usando solamente el servicio gis_ctbb_ssh
. Con eso tenemos acceso remoto a la BDD.