psql: fe_sendauth: nie podano hasła

19

Mam działającą bazę danych PostgreSQL. Teraz chciałbym zautomatyzować niektóre operacje na mojej bazie danych, ale mam problem z hasłem.

Używam następującego skryptu 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"

Po uruchomieniu skryptu bash pojawia się następujący błąd:

psql: fe_sendauth: no password supplied

Próbowałem nawet skonfigurować plik .pgpass w moim katalogu domowym, ale bezskutecznie:

*:*:*:postgres:postgres

Uruchomiłem następujące polecenie:

sudo chmod 0600 .pgpass

Niemniej jednak nie wydaje się, aby którakolwiek z metod działała. Czy ktokolwiek ma jakiś pomysł? Czy zapomniałem coś zrobić?

alibaba
źródło
1
Spróbuj sudo su -c psql postgres psql ...zamiast tego.
Flup,
.pgpassJest w swoim katalogu domowym? Nie w tym postgresużytkownika?
Milen A. Radev,
Tak, znajduje się w moim katalogu domowym, tj. / Home / server2 /
alibaba,

Odpowiedzi:

15

sudonie zachowuje większości zmiennych środowiskowych. Jeśli chcesz określić zmienne środowiskowe dla polecenia uruchamianego pod sudo, zrób to jednak 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"

To, czy sudozezwala na to, zależy od zasad bezpieczeństwa obowiązujących w Twojej witrynie.

Nie polecam tego podejścia, ponieważ ujawnia hasło w historii wiersza poleceń i na liście procesów. Jest o wiele lepiej użyć .pgpasspliku, lub najlepiej ustawić pg_hba.confsię do peeruwierzytelniania localpołączeń z użytkownikiem postgres.

Można użyć .pgpasspliku, ale musi to być .pgpassod użytkownika jesteś sudo„ing do użytkownika, a nie jesteś sudoING z ; ~postgres/.pgpassw tym przypadku musiałoby być . Pomyśl o tym: psqldziała jak postgresnie wie, że prowadził ją przez sudoz konta, to nie wiem, co konto użytkownika, a nawet gdyby tak się stało, że nie ma prawa do odczytu jako użytkownik postgresdo ~youruser/.pgpass.

Dodatkowo -wjest taki sam jak --no-password. Nie ma sensu wymieniać obu.

Craig Ringer
źródło
2
Możesz także skonfigurować sudo, aby umożliwić korzystanie z -Eopcji, która zachowa twoje środowisko (w tym PGPASSWORD). Zapobiega to wyświetlaniu się na liście procesów.
fukawi2