Este artículo explica cómo conectarse a servidores de bases de datos PostgreSQL desde línea de comandos con psql sin necesidad de ingresar contraseñas.
Supongamos que deseamos conectarnos a la base de datos PostgreSQL "db1" en el host db.linuxito.com cuya instancia escucha peticiones el puerto 5432, autenticando con el usuario "usuario".
La terminal interactiva psql
de PostgreSQL no permite pasar la contraseña del usuario de forma no interactiva. Esto significa que al efectuar la conexión, se solicitará la contraseña:
root@debian:~# psql -h db.linuxito.com -p 5432 -d db1 -U usuario Password for user usuario:
Esto es un problema cunado se requiere realizar tareas desde scripts. También es engorroso si uno debe conectarse con frecuencia a una base de datos para realizar tareas de mantenimiento.
Afortunadamente Postgres cuenta con un mecanismo para guardar las contraseñas en un archivo de texto llamado .pgpass
. Este archivo se aloja en el directorio home del usuario y permite almacenar las contraseñas para cada conexión.
Este archivo debe contener el siguiente formato:
hostname:port:database:username:password
Este archivo generalmente no se crea automáticamente al instalar Postgres, con lo cual debe ser creado de forma manual:
root@debian:~# nano ~/.pgpass
Por ejemplo, si la contraseña para este usuario es "trustno1", se debe agregar la siguiente línea:
db.linuxito.com:5432:db1:usuario:trustno1
Debido a que las contraseñas se almacenan de forma plana (sin encriptación), la seguridad de este archivo es de vital importancia. Para que psql
sea capaz de utilizarlo, sus permisos deben ser 0600 o menos (sólo lectura y escritura para el dueño):
root@debian:~# chmod 0600 ~/.pgpass
A partir de ahora, al conectarse a la base "db1" en el host db.linuxito.com y puerto 5432 con el usuario "usuario" no se solicitará la contraseña:
root@debian:~# psql -h db.linuxito.com -p 5432 -d db1 -U usuario psql (11.5, server 12.1) SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off) Type "help" for help. db1=>
Referencias