psql: fe_sendauth: no se proporcionó contraseña

19

Tengo una base de datos PostgreSQL en funcionamiento. Ahora me gustaría automatizar algunas operaciones en mi base de datos, pero tengo un problema con la contraseña.

Estoy usando el siguiente script bash:

#!/bin/bash
export PGPASSWORD="postgres"
sudo -u postgres psql -d pg_ldap -w --no-password -h localhost -p 5432 -t -c "SELECT id FROM radusers WHERE id=1"

Cuando ejecuto el script bash me sale el siguiente error:

psql: fe_sendauth: no password supplied

Incluso he intentado configurar el archivo .pgpass en mi directorio de inicio, pero fue en vano:

*:*:*:postgres:postgres

He ejecutado el siguiente comando:

sudo chmod 0600 .pgpass

Sin embargo, no parece que ninguno de los métodos funcione. ¿Alguien tiene alguna idea? ¿Me estoy olvidando de hacer algo?

alibaba
fuente
1
Intenta en su sudo su -c psql postgres psql ...lugar.
Flup
¿ .pgpassEstá en su directorio de inicio? ¿No está en la del postgresusuario?
Milen A. Radev
Sí, está en mi directorio de inicio, es decir, / home / server2 /
alibaba

Respuestas:

15

sudono retiene la mayoría de las variables de entorno. Si desea especificar variables de entorno para un comando ejecutado sudo, hágalo sin embargo sudo:

sudo PGPASSWORD="postgres" -u postgres psql -d pg_ldap -w --no-password -h localhost -p 5432 -t -c "SELECT id FROM radusers WHERE id=1"

Si sudoesto lo permite o no , dependerá de la política de seguridad vigente en su sitio.

No recomiendo este enfoque, ya que expone la contraseña en el historial de la línea de comandos y en la lista de procesos. Es mucho mejor usar un .pgpassarchivo, o preferiblemente configurado pg_hba.confpara la peerautenticación de las localconexiones del usuario postgres.

Se puede utilizar un .pgpassarchivo, pero debe ser el .pgpassdel usuario que está sudo'ing a, no el usuario que estas sudoing de ; Tendría que ser ~postgres/.pgpassen este caso. Piense en esto: psqlse ejecuta como postgresno sabe lo ejecutó a través sudode su cuenta, que no sabe lo que su cuenta de usuario es, e incluso si lo hiciera no tiene permiso de lectura como de usuario postgresa ~youruser/.pgpass.

Además, -wes lo mismo que --no-password. No tiene sentido especificar ambos.

Craig Ringer
fuente
2
También puede configurar sudo para permitirle usar la -Eopción que preservará su entorno (incluido PGPASSWORD). Esto evita que se muestre en la lista de procesos.
fukawi2