psql: fe_sendauth: không cung cấp mật khẩu


19

Tôi có một cơ sở dữ liệu PostgreQuery đang hoạt động. Bây giờ tôi muốn tự động hóa một số thao tác trên cơ sở dữ liệu của mình nhưng tôi gặp vấn đề với mật khẩu.

Tôi đang sử dụng tập lệnh bash sau:

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

Khi tôi chạy tập lệnh bash, tôi gặp lỗi sau:

psql: fe_sendauth: no password supplied

Tôi thậm chí đã cố gắng định cấu hình tệp .pgpass trong thư mục chính của mình nhưng không được:

*:*:*:postgres:postgres

Tôi đã chạy lệnh sau:

sudo chmod 0600 .pgpass

Tuy nhiên, dường như không có phương pháp nào hoạt động. Có ai có ý kiến ​​gì không? Có phải tôi đang quên làm gì đó?


1
Hãy thử sudo su -c psql postgres psql ...thay thế.
Flup

.pgpasstrong thư mục nhà của bạn ? Không phải trong một postgresngười dùng?
Milen A. Radev

Có trong thư mục nhà của tôi, tức là / home / server2 /
alibaba

Câu trả lời:


15

sudokhông giữ lại hầu hết các biến môi trường. Nếu bạn muốn chỉ định các biến môi trường cho một lệnh chạy bên dưới sudo, hãy làm như vậy 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"

Việc có sudocho phép điều này hay không sẽ phụ thuộc vào chính sách bảo mật có hiệu lực trên trang web của bạn.

Tôi không khuyến nghị cách tiếp cận này vì nó tiết lộ mật khẩu trong lịch sử dòng lệnh và trong danh sách quy trình. Tốt hơn hết là sử dụng .pgpasstệp hoặc tốt nhất là thiết pg_hba.conflập để peerxác thực các localkết nối từ người dùng postgres.

Bạn có thể sử dụng một .pgpasstập tin, nhưng nó phải là .pgpasscủa người dùng mà bạn đang sudo'ing đến, không phải là người dùng mà bạn đang sudoing từ ; nó cần phải ~postgres/.pgpassở trong trường hợp này Hãy suy nghĩ về nó: psqlchạy như postgreskhông biết bạn chạy nó qua sudotừ tài khoản của bạn, nó không biết những gì tài khoản người dùng của bạn, và thậm chí nếu nó đã làm nó không có sự cho phép đọc như sử dụng postgresđể ~youruser/.pgpass.

Ngoài ra, -wcũng giống như --no-password. Không có điểm nào chỉ định cả hai.


2
Bạn cũng có thể thiết lập sudo để cho phép bạn sử dụng -Etùy chọn sẽ bảo vệ môi trường của bạn (bao gồm PGPASSWORD). Điều này ngăn nó hiển thị trên danh sách quá trình.
fukawi2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.