जब स्क्रिप्ट चल रही हो तो सुडोकू को समाप्त न करें

Dec 22 2020

मुझे कभी-कभी एक समय में एक स्क्रिप्ट चलाने की आवश्यकता होती है, जिसके दौरान कुछ आदेशों की आवश्यकता होती है sudo। हालाँकि, यदि मैं sudoसमय-समय पर पासवर्ड की जाँच नहीं करता और पुनः दर्ज करता हूँ, तो मुझे वह sudo: timed out reading passwordत्रुटि मिलती है जो कभी-कभी पूरी बात को तोड़ देती है। मैं उपयोग नहीं करना चाहता sudo myscript.shक्योंकि कुछ कमांड को बिना चलाए जाना चाहिए sudo

मैं sudoबाकी पासवर्ड को पूरी प्रणाली के लिए स्क्रिप्ट के लिए जारी रखना चाहता हूं , बाकी सिस्टम को बदले बिना ( केवल इस 1 स्क्रिप्ट के लिए sudoदृढ़ता )।

क्या sudoस्क्रिप्ट की पूरी अवधि के लिए अंतिम और केवल 1 स्क्रिप्ट के लिए एक रास्ता है ?

जवाब

KamilMaciorowski Dec 22 2020 at 13:53

संभावना: स्क्रिप्ट के साथ चलाएँ sudo myscript.sh। स्क्रिप्ट रन कमांड के अंदर जिसे sudoइस तरह से चलाया जाना चाहिए :

sudo -u "$SUDO_USER" foo args

(संभवत: उचित तर्क के साथ पूरी स्क्रिप्ट कभी भी बिना चले sudo)। रूट उपयोगकर्ता को इसके लिए प्रमाणित करने की आवश्यकता नहीं है sudo, और जैसे कि किसी अन्य उपयोगकर्ता के रूप में कमांड चलाने के लिए पासवर्ड दर्ज करने की आवश्यकता नहीं है ।

यह इस बात पर निर्भर करता है कि स्क्रिप्ट कितनी बड़ी है (आपको इसे बदलने की कितनी आवश्यकता है) और आप अपने साथ पूरी चीज़ को चलाने के बारे में कैसा महसूस करते sudoहैं, यह विचार आपको पसंद आ सकता है या नहीं। आपके वर्तमान दृष्टिकोण में गैर-ऊंचा कोड डिफ़ॉल्ट है, sudoस्पष्ट अपवाद होने के साथ लाइनें । मेरा दृष्टिकोण इसे उल्टा कर देता है। स्क्रिप्ट बनाते और परीक्षण करते समय आपको अधिक सावधान रहने की आवश्यकता है। मैं मानता हूं कि यह सबसे अच्छा अभ्यास नहीं है; अभी भी यह समाप्त होने की समस्या को हल करता है sudo

व्यक्तिगत रूप से मैं इस समाधान का उपयोग लंबे समय तक चलने वाली स्क्रिप्ट के लिए करूँगा जो बहुत जटिल नहीं है (सरल लूप, कुछ कमांड)। मैं एक जटिल स्क्रिप्ट के पुनर्निर्माण से पहले दो बार सोचूंगा।


एक अन्य दृष्टिकोण समय-समय पर पृष्ठभूमि में कैश्ड क्रेडेंशियल्स को अपडेट करना है। डिफ़ॉल्ट रूप से ये प्रति tty (देखें tty_tickets) हैं। इस तरह आगे बढ़ें:

sudo -v                              # to enter your password once
while sleep 300; do sudo -v; done &  # adjust the interval if needed
myscript.sh

अब जरूरत नहीं होने पर बैकग्राउंड जॉब मारना न भूलें। स्क्रिप्ट खुद ऐसे काम शुरू कर सकती है; तब आप संभवतः स्क्रिप्ट को समाप्त होने पर काम को मारने के लिए स्क्रिप्ट में कुछ जाल चाहते हैं।