psql: fe_sendauth: कोई पासवर्ड नहीं दिया गया


19

मेरे पास एक अप और चल रहा है PostgreSQL डेटाबेस। अब मैं अपने डेटाबेस पर कुछ संचालन को स्वचालित करना चाहूंगा, लेकिन मुझे पासवर्ड की समस्या है।

मैं निम्नलिखित बैश स्क्रिप्ट का उपयोग कर रहा हूं:

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

जब मैं बैश स्क्रिप्ट चलाता हूं तो मुझे निम्नलिखित त्रुटि मिलती है:

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लिए अधिमानतः सेट किया गया है ।peerlocalpostgres

आप एक का उपयोग कर सकते .pgpassफ़ाइल, लेकिन यह होना चाहिए .pgpassकि आप कर रहे हैं उपयोगकर्ता के sudo', नहीं उपयोगकर्ता के लिए ing आप कर रहे हैं sudoआईएनजी से ; ~postgres/.pgpassइस मामले में होना चाहिए । इसके बारे में सोचें: psqlजैसा postgresकि आप नहीं जानते कि आप इसे sudoअपने खाते से चला रहे हैं, यह नहीं जानता कि आपका उपयोगकर्ता खाता क्या है, और यहां तक ​​कि अगर उसने ऐसा नहीं किया है तो उपयोगकर्ता के रूप में अनुमति नहीं पढ़ सकता postgresहै ~youruser/.pgpass

इसके अतिरिक्त, के -wरूप में ही है --no-password। दोनों को निर्दिष्ट करने का कोई मतलब नहीं है।


2
आप sudo को भी सेट कर सकते हैं ताकि आप उस -Eविकल्प का उपयोग कर सकें जो आपके पर्यावरण (सहित PGPASSWORD) को संरक्षित करेगा । यह इसे प्रक्रिया सूची में दिखाने से रोकता है।
fukawi2
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.