/ / शेल स्क्रिप्ट "सूदो: नो ट्टी प्रेजेंट एंड नो आस्कपास प्रोग्राम निर्दिष्ट" देते हुए जब सूडो कमांड को अंजाम देने की कोशिश की जा रही है तो [डुप्लिकेट] - लाइनक्स, बैश, शेल, उबंटू

शेल स्क्रिप्ट "sudo: no tty present और कोई askpass प्रोग्राम निर्दिष्ट नहीं है" sudo कमांड निष्पादित करने का प्रयास करते समय [डुप्लिकेट] - लिनक्स, बैश, खोल, उबंटू

  • मेरे पास एक शेल स्क्रिप्ट है जो एक उपयोगकर्ता बनाता है और उस उपयोगकर्ता के रूप में किसी अन्य स्क्रिप्ट को निष्पादित करता है

    sudo useradd -m devops
    sudo passwd devops
    sudo adduser devops sudo
    su - devops -c "sh /path/to/myscript.sh"
    
  • यह स्क्रिप्ट उपयोगकर्ता बनाता है, पासवर्ड सेट करता है और उम्मीद के अनुसार sudo समूह में उपयोगकर्ता जोड़ता है।

  • myscript.sh में ऐसे कमांड होते हैं जो sudo previlages का उपयोग करते हैं। (sudo apt-get update, sudo apt-get install सॉफ्टवेयर-गुण-सामान्य आदि)। और अन्य कमांड जैसे ssh-keygen, कर्ल और विग।
  • एक सूडो को छोड़कर सभी कमांड को सही तरीके से निष्पादित किया जाता है और परिणामों को छोड़कर।
  • लेकिन sudo वाले कमांड एरर देने से फेल हो जाते हैं "कोई टिट मौजूद नहीं है और कोई पूछ-ताछ कार्यक्रम निर्दिष्ट नहीं है"
  • इस मामले में ऐसा क्यों होता है और मैं इसे कैसे दूर कर सकता हूं?
  • मैंने अनजाने प्रश्नों को देखा है, लेकिन यदि मैं इस संदर्भ में स्पष्ट व्याख्या प्राप्त करूँ तो आभारी रहूँगा, धन्यवाद।

उत्तर:

जवाब के लिए 3 № 1

इसे बदलने का प्रयास करें:

su - devops -c "sh /path/to/myscript.sh"

इसके साथ:

sudo -u devops -H sh -c "sh /path/to/myscript.sh"

The -c का विकल्प su इंटरैक्टिव मोड का समर्थन नहीं करता है:

-c, --command COMMAND कोई आदेश निर्दिष्ट करें जिसे द्वारा लागू किया जाएगा खोल अपने -c का उपयोग कर.

निष्पादित आदेश का कोई नियंत्रण टर्मिनल नहीं होगा. यह विकल्प interractive प्रोग्राम ्सजो की आवश्यकता वाले interractive programs को निष्पादित करने के लिए उपयोग नहीं किया जा सकता नियंत्रित TTY.

(man su)

वैसे, मैं "का उपयोग नहीं होगा sudo एक स्क्रिप्ट के भीतर हर जगह. स्क्रिप्ट बस की आवश्यकता हो सकती है root अनुमतियाँ. स्क्रिप्ट के भीतर आप विशेषाधिकार छोड़ सकते हैं जहां उपरोक्त के माध्यम से आवश्यक sudo आदेश।