.pgpass con postgreSQL no funciona

13

He puesto un archivo .pgpass en /folder/.pgpass y se ve así

*:*:*:postgres:password_for_postgres

Tengo un script bash donde hago una copia de seguridad de la base de datos desde postgreSQL:

#!/bin/bash
export PGPASSFILE=/folder/.pgpass
echo $PGPASSFILE
pg_dump --username=postgres --format=c --file=/backup/db/db.sqlc database

Sin embargo, el script todavía me pide la contraseña. PGPASSFILE tiene el valor como debería, por lo que puedo ver. ¿Alguna pista sobre cuál podría ser el problema?

/ K

Kerstin Viltersten
fuente

Respuestas:

8

¿El archivo pgpass está configurado en modo 0600 (es decir, solo lectura / escritura por parte del propietario)? La biblioteca del cliente lo ignorará si es legible en grupo o en el mundo.

araqnid
fuente
5

En mi configuración ( Ubuntu 10.04.3y PostgreSQL 8.4), finalmente pude hacer que funcione cuando el nombre de usuario para el que estoy conectado es el mismo para el que estoy tratando de obtener una contraseña del .pgpassarchivo.

Inicié sesión como deployer, estaba tratando de usar el .pgpassarchivo para acceder a la base de datos propiedad de un nombre de usuario appname, que no tiene equivalente de usuario de Unix. No pude hacer el .pgpasstrabajo, hasta que comencé a usarlo deployercomo usuario para acceder a mi base de datos ...

Aquí está el /home/deployer/.pgpasscontenido de mi archivo:

*:*:*:deployer:password

Aquí una parte de la /etc/postgresql/8.4/main/pg_hba.confuna:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD                                                

# "local" is for Unix domain socket connections only                                                        
local   all         all                               md5                                                   
# IPv4 local connections:                                                                                   
host    all         all         127.0.0.1/32          md5                                                   
host    all         all         192.168.0.1/32        md5                                                   
# IPv6 local connections:                                                                                   
host    all         all         ::1/128               md5 

Como puede ver, todas mis conexiones requieren contraseña ( md5).

Con esta configuración, suponiendo que tengo una base de datos que creé con este comando:

deployer@ubuntu-server:~$ createdb -T template0 -O deployer -E UTF8 dbname

Puedo realizar la siguiente operación sin ingresar una contraseña:

deployer@ubuntu-server:~$ dropdb dbname

Tan pronto como cambie el nombre de mi .pgpassa .pgpass-no, requerirá una contraseña.

Por cierto, no olvides que tu .pgpassarchivo debe estar bajo 0600permisos:

deployer@ubuntu-server:~$ ls -la .pgpass
-rw------- 1 deployer staff 24 2012-01-06 17:29 .pgpass
Romain Champourlier
fuente
2
Puede controlar al usuario de pg para que se conecte usando la -Ubandera dropdbycreatedb
Kevin Horn
0

1) Crear un archivo .pgpass con contenido

host: 5432: somedb: someuser: somepass

2) establece los permisos usando el comando

sudo chmod 600 .pgpass

3) Establezca el propietario del archivo como el mismo usuario con el que inició sesión:

sudo chown login_username: login_username .pgpass

4) Establecer la variable de entorno PGPASSFILE:

export PGPASSFILE = '/ home / user / .pgpass'

Ahora verifique conectándose a la base de datos:

psql -h host -U someuser somedb

No solicitaré la contraseña e iniciaré sesión en postgresql.

Shrinivas
fuente