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사용자의 하나?
Milen A. Radev

예, 내 홈 디렉토리에 있습니다. 예 : / 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파일 을 사용하는 것이 훨씬 낫 거나 user 의 연결 인증을 pg_hba.conf위해 설정 하는 것이 좋습니다 .peerlocalpostgres

당신이 사용할 수있는 .pgpass파일을,하지만이 있어야합니다 .pgpass당신이있어 사용자의 sudo아닌 사용자에게 보내고 '를 당신이있는 거 sudoING 에서 ; ~postgres/.pgpass이 경우에 있어야합니다 . 그것에 대해 생각 : psql로 실행 postgres이를 통해 그것을 실행 모르는 sudo계정에서, 그것은 사용자 계정이 무엇인지 모르고, 그것이 한 경우에도 그것이 사용자로 읽기 권한이없는 경우 postgres~youruser/.pgpass.

또한와 -w동일합니다 --no-password. 둘 다 지정하는 것은 없습니다.


2
-E환경을 보존 하는 옵션 (포함 PGPASSWORD) 을 사용할 수 있도록 sudo를 설정할 수도 있습니다 . 이렇게하면 프로세스 목록에 표시되지 않습니다.
fukawi2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.