psql: fe_sendauth: nenhuma senha fornecida

19

Eu tenho um banco de dados PostgreSQL em funcionamento. Agora eu gostaria de automatizar algumas operações no meu banco de dados, mas tenho um problema com a senha.

Estou usando o seguinte script 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"

Quando executo o script bash, recebo o seguinte erro:

psql: fe_sendauth: no password supplied

Eu até tentei configurar o arquivo .pgpass no meu diretório pessoal, mas sem sucesso:

*:*:*:postgres:postgres

Eu executei o seguinte comando:

sudo chmod 0600 .pgpass

No entanto, parece que nenhum dos métodos funciona. Alguém tem alguma ideia? Estou esquecendo de fazer alguma coisa?

Alibaba
fonte
11
Tente em sudo su -c psql postgres psql ...vez disso.
Flup 25/07
O .pgpassestá no seu diretório pessoal? Não está no postgresusuário?
Milen A. Radev
Sim, é no meu diretório home, ou seja, / home / server2 /
Alibaba

Respostas:

15

sudonão retém a maioria das variáveis ​​de ambiente. Se você deseja especificar variáveis ​​de ambiente para um comando executado sudo, faça o seguinte 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"

A sudopermissão ou não disso dependerá da política de segurança em vigor no seu site.

Eu não recomendo essa abordagem, pois expõe a senha no histórico da linha de comando e na lista de processos. É muito melhor usar um .pgpassarquivo ou, de preferência, configurar pg_hba.confpara peerautenticação de localconexões do usuário postgres.

Você pode usar um .pgpassarquivo, mas ele deve ser o .pgpassdo usuário que você está sudo'ing para, não o usuário que você está sudoing partir ; precisaria estar ~postgres/.pgpassneste caso. Pense nisso: psqlem execução como postgresnão sabe que ele correu através sudode sua conta, ele não sabe qual é a sua conta de usuário, e mesmo que o fizesse ele não tem permissão de leitura como o usuário postgresa ~youruser/.pgpass.

Além disso, -wé o mesmo que --no-password. Não faz sentido especificar os dois.

Craig Ringer
fonte
2
Você também pode configurar o sudo para permitir que você use a -Eopção que preservará seu ambiente (inclusive PGPASSWORD). Isso evita que seja exibido na lista de processos.
fukawi2