psql: fe_sendauth: nessuna password fornita


19

Ho un database PostgreSQL attivo e funzionante. Ora vorrei automatizzare alcune operazioni sul mio database ma ho un problema con la password.

Sto usando il seguente 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"

Quando eseguo lo script bash ricevo il seguente errore:

psql: fe_sendauth: no password supplied

Ho anche provato a configurare il file .pgpass nella mia home directory ma inutilmente:

*:*:*:postgres:postgres

Ho eseguito il seguente comando:

sudo chmod 0600 .pgpass

Tuttavia non sembra che nessuno dei metodi funzioni. Qualcuno ha qualche idea? Sto dimenticando di fare qualcosa?


1
Prova sudo su -c psql postgres psql ...invece.
Flup,

La .pgpasssi trova nella vostra directory home? Non in quello postgresdell'utente?
Milen A. Radev,

Sì, è nella mia directory home, ovvero / home / server2 /
alibaba, il

Risposte:


15

sudonon mantiene la maggior parte delle variabili di ambiente. Se si desidera specificare le variabili di ambiente per un comando eseguito in sudo, procedere come segue 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"

L' sudoautorizzazione o meno dipenderà dalla politica di sicurezza in vigore sul tuo sito.

Non consiglio questo approccio in quanto espone la password nella cronologia della riga di comando e nell'elenco dei processi. È molto meglio usare un .pgpassfile, o preferibilmente configurato pg_hba.confper l' peerautenticazione delle localconnessioni da parte dell'utente postgres.

È possibile utilizzare un .pgpassfile, ma deve essere il .pgpassdell'utente sei sudo'ing per, non l'utente voi sono sudoing da ; dovrebbe essere ~postgres/.pgpassin questo caso. Pensateci: psqlin esecuzione come postgresnon sapete è stato eseguito via sudodal tuo conto, che non sa che cosa il vostro account utente è, e anche se lo ha fatto non ha il permesso di lettura come utente postgresa ~youruser/.pgpass.

Inoltre, -wè lo stesso di --no-password. Non ha senso specificare entrambi.


2
Puoi anche impostare sudo per permetterti di usare l' -Eopzione che preserverà il tuo ambiente (incluso PGPASSWORD). Questo impedisce che venga visualizzato nell'elenco dei processi.
fukawi2,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.