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 ...вместо.
Флюп
Это .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