psql: fe_sendauth: пароль не вводиться


19

У мене працює і працює база даних PostgreSQL. Тепер я хотів би автоматизувати деякі операції з моєю базою даних, але у мене проблема з паролем.

Я використовую такий сценарій 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"

Коли я запускаю скрипт bash, я отримую таку помилку:

psql: fe_sendauth: no password supplied

Я навіть намагався налаштувати .pgpass-файл у своєму домашньому каталозі, але безрезультатно:

*:*:*:postgres:postgres

Я виконав таку команду:

sudo chmod 0600 .pgpass

Проте, схоже, що жоден із методів не працює. Хтось має якусь ідею? Я забуваю щось робити?


1
Спробуйте sudo su -c psql postgres psql ...замість цього.
Flup

Це .pgpassу вашому домашньому каталозі? Не в postgresкористувальницькій?
Мілен А. Радев

Так, це в моєму домашньому каталозі, тобто / home / server2 /
alibaba

Відповіді:


15

sudoне зберігає більшість змінних середовища. Якщо ви хочете вказати змінні середовища для команди, запущеної під sudo, зробіть це, хоча 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"

Чи sudoбуде це дозволено чи ні , залежатиме від політики безпеки, яка діє на вашому сайті.

Я не рекомендую такий підхід, оскільки він відкриває пароль в історії командного рядка та в списку процесів. Набагато краще використовувати .pgpassфайл або бажано встановити pg_hba.confдля peerавтентифікації localз'єднань від користувача postgres.

Ви можете використовувати .pgpassфайл, але він повинен бути .pgpassвід користувача , якого ви sudo«ІНГ, а не користувач , якого Ви sudoІНГ з ; ~postgres/.pgpassу цьому випадку це повинно бути . Подумайте про це: psqlпрацює , як postgresне знає , що побіг через sudoзі свого рахунку, він не знає , що ваш обліковий запис користувача, і навіть якщо він зробив це не має права на читання , як користувач postgresз ~youruser/.pgpass.

Крім того, -wте саме, що --no-password. Немає сенсу вказувати і те і інше.


2
Ви також можете налаштувати sudo, щоб дозволити використовувати -Eпараметр, який збереже ваше оточення (у тому числі PGPASSWORD). Це запобігає його відображенню у списку процесів.
fukawi2
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.