psql: fe_sendauth: kein Passwort angegeben

19

Ich habe eine laufende PostgreSQL-Datenbank. Jetzt möchte ich einige Vorgänge in meiner Datenbank automatisieren, aber ich habe ein Problem mit dem Kennwort.

Ich benutze das folgende Bash-Skript:

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

Wenn ich das Bash-Skript ausführe, wird folgende Fehlermeldung angezeigt:

psql: fe_sendauth: no password supplied

Ich habe sogar versucht, die .pgpass-Datei in meinem Home-Verzeichnis zu konfigurieren, aber ohne Erfolg:

*:*:*:postgres:postgres

Ich habe den folgenden Befehl ausgeführt:

sudo chmod 0600 .pgpass

Trotzdem scheint keine der Methoden zu funktionieren. Hat jemand eine Idee? Vergesse ich etwas zu tun?

alibaba
quelle
1
Versuchen Sie es sudo su -c psql postgres psql ...stattdessen.
Flup
Das .pgpassist in deinem Homeverzeichnis? Nicht in der des postgresBenutzers?
Milen A. Radev
Ja, es befindet sich in meinem Home-Verzeichnis, dh / home / server2 /
alibaba

Antworten:

15

sudobehält die meisten Umgebungsvariablen nicht bei. Wenn Sie Umgebungsvariablen für einen Befehl angeben möchten, der unter ausgeführt wird sudo, gehen Sie folgendermaßen vor 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"

Ob sudodies zulässig ist oder nicht , hängt von den auf Ihrer Site geltenden Sicherheitsrichtlinien ab.

Ich empfehle diesen Ansatz nicht, da das Kennwort im Befehlszeilenverlauf und in der Prozessliste angezeigt wird. Es ist viel besser, eine .pgpassDatei zu verwenden oder vorzugsweise pg_hba.conffür die peerAuthentifizierung von localVerbindungen vom Benutzer einzurichten postgres.

Sie können eine Verwendung .pgpassDatei, aber es muss das sein .pgpassdes Benutzers du bist sudo‚ing zu, nicht dem Benutzer , den Sie sind sudoing aus ; es müsste ~postgres/.pgpassin diesem Fall sein. Denken Sie darüber nach: psqlAusführen, wenn Sie postgresnicht wissen, dass Sie es über sudoIhr Konto ausgeführt haben, wenn Sie nicht wissen, was Ihr Benutzerkonto ist, und selbst wenn dies der Fall ist, hat es keine Leseberechtigung als Benutzer postgresfür ~youruser/.pgpass.

Darüber hinaus -wist das gleiche wie --no-password. Es macht keinen Sinn, beides zu spezifizieren.

Craig Ringer
quelle
2
Sie können sudo auch so einrichten, dass Sie die -EOption verwenden können, mit der Ihre Umgebung (einschließlich PGPASSWORD) erhalten bleibt . Dies verhindert, dass es in der Prozessliste angezeigt wird.
Fukawi2