psql: fe_sendauth: aucun mot de passe fourni

19

J'ai une base de données PostgreSQL opérationnelle. Maintenant, je voudrais automatiser certaines opérations sur ma base de données mais j'ai un problème avec le mot de passe.

J'utilise le script bash suivant:

#!/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"

Lorsque j'exécute le script bash, j'obtiens l'erreur suivante:

psql: fe_sendauth: no password supplied

J'ai même essayé de configurer le fichier .pgpass dans mon répertoire personnel mais en vain:

*:*:*:postgres:postgres

J'ai exécuté la commande suivante:

sudo chmod 0600 .pgpass

Néanmoins, il ne semble pas que l'une des méthodes fonctionne. Est-ce que quelqu'un a une idée? Suis-je en train d'oublier de faire quelque chose?

alibaba
la source
1
Essayez sudo su -c psql postgres psql ...plutôt.
Flup
Le .pgpassest dans votre répertoire personnel? Pas dans celui de l' postgresutilisateur?
Milen A. Radev,
Oui, il est dans mon répertoire personnel, c.-à-d. / Home / server2 /
alibaba

Réponses:

15

sudone conserve pas la plupart des variables d'environnement. Si vous souhaitez spécifier des variables d'environnement pour une commande exécutée sous sudo, faites-le cependant 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"

Que cela soit autorisé ou non sudodépendra de la politique de sécurité en vigueur sur votre site.

Je ne recommande pas cette approche car elle expose le mot de passe dans l'historique de la ligne de commande et dans la liste des processus. Il est préférable d'utiliser un .pgpassfichier, ou de préférence configuré pg_hba.confpour l' peerauthentification des localconnexions de l'utilisateur postgres.

Vous pouvez utiliser un .pgpassfichier, mais il doit être .pgpassde l'utilisateur que vous êtes sudo« ING, et non l'utilisateur dont vous sudoING à partir ; il faudrait que ce soit ~postgres/.pgpassdans ce cas. Pensez-y: en psqlcours d' exécution comme postgresne le savez - vous couru par pas sudode votre compte, il ne sait pas ce que votre compte utilisateur est, et même si elle l'a fait il n'a pas l' autorisation de lecture en tant qu'utilisateur postgresà ~youruser/.pgpass.

En outre, -west identique à --no-password. Il est inutile de préciser les deux.

Craig Ringer
la source
2
Vous pouvez également configurer sudo pour vous permettre d'utiliser l' -Eoption qui préservera votre environnement (y compris PGPASSWORD). Cela l'empêche de s'afficher dans la liste des processus.
fukawi2