psql: fe_sendauth: tidak ada kata sandi yang diberikan

19

Saya memiliki dan menjalankan database PostgreSQL. Sekarang saya ingin mengotomatiskan beberapa operasi pada basis data saya tetapi saya memiliki masalah dengan kata sandi.

Saya menggunakan skrip bash berikut:

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

Ketika saya menjalankan skrip bash saya mendapatkan kesalahan berikut:

psql: fe_sendauth: no password supplied

Saya bahkan telah mencoba mengkonfigurasi file .pgpass di direktori home saya tetapi tidak berhasil:

*:*:*:postgres:postgres

Saya telah menjalankan perintah berikut:

sudo chmod 0600 .pgpass

Namun demikian, tampaknya tidak ada satu pun metode yang berhasil. Adakah yang punya ide? Apakah saya lupa melakukan sesuatu?

Alibaba
sumber
1
Coba sudo su -c psql postgres psql ...saja.
Flup
Apakah .pgpassada di direktori home Anda ? Tidak ada di postgrespengguna?
Milen A. Radev
Ya itu ada di direktori home saya, yaitu / home / server2 /
alibaba

Jawaban:

15

sudotidak mempertahankan sebagian besar variabel lingkungan. Jika Anda ingin menentukan variabel lingkungan untuk perintah yang dijalankan di bawah sudo, lakukan itu 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"

Apakah sudomengizinkan atau tidak akan tergantung pada kebijakan keamanan yang berlaku di situs Anda.

Saya tidak merekomendasikan pendekatan ini karena mengekspos kata sandi dalam sejarah baris perintah dan dalam daftar proses. Jauh lebih baik menggunakan .pgpassfile, atau lebih baik diatur pg_hba.confuntuk peerotentikasi localkoneksi dari pengguna postgres.

Anda dapat menggunakan .pgpassfile, namun itu harus .pgpassdari pengguna Anda sudo'ing untuk, bukan pengguna Anda sedang sudoing dari ; harus ~postgres/.pgpassdalam kasus ini. Pikirkan tentang hal ini: psqlberjalan sebagai postgrestidak tahu Anda berlari melalui sudodari akun Anda, ia tidak tahu apa account pengguna Anda, dan bahkan jika itu tidak memiliki izin baca sebagai pengguna postgresuntuk ~youruser/.pgpass.

Selain itu, -wsama dengan --no-password. Tidak ada gunanya menentukan keduanya.

Craig Ringer
sumber
2
Anda juga dapat mengatur sudo agar Anda dapat menggunakan -Eopsi yang akan melestarikan lingkungan Anda (termasuk PGPASSWORD). Ini mencegahnya ditampilkan pada daftar proses.
fukawi2