Question psql: fe_sendauth: aucun mot de passe fourni


J'ai une base de données PostgreSQL active. Maintenant, j'aimerais 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, l'erreur suivante apparaît:

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 lancé la commande suivante:

sudo chmod 0600 .pgpass

Néanmoins, aucune des méthodes ne semble fonctionner. Est-ce que quelqu'un a une idée? Est-ce que j'oublie de faire quelque chose?


11
2017-07-25 10:08


origine


Essayer sudo su -c psql postgres psql ... au lieu. - Flup
le .pgpass est dans votre répertoire de base? Pas dans le postgres celui de l'utilisateur? - Milen A. Radev
Oui, c’est dans mon répertoire personnel, c’est-à-dire / home / server2 / - alibaba


Réponses:


sudo ne conserve pas la plupart des variables d'environnement. Si vous souhaitez spécifier des variables d’environnement pour une commande exécutée sous sudobien le faire 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 ce soit ou non sudo Cela dépend 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 ligne de commande et dans la liste de processus. C'est beaucoup mieux d'utiliser un .pgpass fichier, ou de préférence mis pg_hba.conf pour peer authentification de local connexions de l'utilisateur postgres.

Vous pouvez utiliser un .pgpass fichier, mais ce doit être le .pgpass de l'utilisateur que vous êtes sudo'ing, pas l'utilisateur que vous êtes sudoing de; il faudrait être ~postgres/.pgpass dans ce cas. Penses-y: psql en cours d'exécution en tant que postgres ne sait pas que tu l'as couru via sudo depuis votre compte, il ne sait pas ce qu'est votre compte d'utilisateur, et même s'il le faisait, il n'a pas de permission de lecture en tant qu'utilisateur. postgres à ~youruser/.pgpass.

Aditionellement, -w est le même que --no-password. Il ne sert à rien de spécifier les deux.


12
2017-07-26 00:24



Vous pouvez également configurer sudo pour vous permettre d’utiliser le -E option qui préservera votre environnement (y compris PGPASSWORD). Cela empêche son affichage dans la liste des processus. - fukawi2