Ask सुडो: फिक्स टेंट प्रेजेंट और नो आस्कपास प्रोग्राम निर्दिष्ट ’त्रुटि को कैसे ठीक करें?


438

मैं एक मेकफाइल का उपयोग करके कुछ स्रोतों को संकलित करने की कोशिश कर रहा हूं। मेकफाइल में आदेशों का एक समूह होता है, जिसे चलाने की आवश्यकता होती है sudo

जब मैं किसी टर्मिनल से स्रोतों को संकलित करता हूं तो सब ठीक हो जाता है और पहली बार एक sudoकमांड को पासवर्ड के इंतजार में चलाया जाता है। एक बार जब मैं पासवर्ड टाइप करता हूं, तो रिज्यूमे बनाएं और पूरा करें।

लेकिन मैं नेटबीन्स के स्रोतों को संकलित करने में सक्षम होना चाहूंगा। इसलिए, मैंने एक परियोजना शुरू की और नेटबिन को दिखाया जहां सूत्रों को खोजना है, लेकिन जब मैं परियोजना को संकलित करता हूं तो यह त्रुटि देता है:

sudo: no tty present and no askpass program specified

पहली बार यह एक sudoकमांड को हिट करता है ।

मैंने इंटरनेट पर इस मुद्दे को देखा है और मुझे मिले सभी समाधान एक बात की ओर इशारा करते हैं: इस उपयोगकर्ता के लिए पासवर्ड को अक्षम करना। चूंकि प्रश्न में उपयोगकर्ता यहां रूट है। मैं यह करना नहीं चाहता।

क्या कोई और उपाय है?


3
मैं एक खिलौना ऑपरेटिंग सिस्टम संकलित कर रहा हूं। मुझे वीएम को सेटअप करने के लिए कुछ सामान करने की जरूरत है, जिसमें बूट सेक्टर के साथ वर्चुअल एचडीडी बनाना शामिल है।
हेब्बू

1
यह भी देखें stackoverflow.com/q/20248009/873282
koppor

जैसा कि serverfault.com/a/597268 में बताया गया है , sudo -n my-commandमेरे लिए काम करता है। HIH!
andreyevbr

1
कृपया एक उत्तर चुनें।
इचिमारू

1
@andreyevbr मुझे ऐसा नहीं लगता। sudo: a password is required
इचिमारू

जवाबों:


260

उपयोगकर्ता को पासवर्ड के लिए संकेत दिए बिना उस आदेश का उपयोग करने के लिए समस्या को हल करना चाहिए। पहले एक शेल कंसोल खोलें और टाइप करें:

sudo visudo

फिर उस फ़ाइल को बहुत अंत तक जोड़ने के लिए संपादित करें:

username ALL = NOPASSWD: /fullpath/to/command, /fullpath/to/othercommand

जैसे

john ALL = NOPASSWD: /sbin/poweroff, /sbin/start, /sbin/stop

उपयोगकर्ता johnको sudo की अनुमति देगा poweroff, startऔर stopपासवर्ड के लिए संकेत दिए बिना।

कीस्ट्रोक्स के लिए स्क्रीन के निचले भाग को देखें जिसे आपको विडोको में उपयोग करने की आवश्यकता है - यह vi नहीं है - और किसी भी समस्या के पहले संकेत पर बचत किए बिना बाहर निकलें। स्वास्थ्य चेतावनी: इस फ़ाइल को दूषित करने के गंभीर परिणाम होंगे, देखभाल के साथ संपादित करें!


4
हाँ, sudoers मैन पेज ने मेरी आँखें खोल दी हैं कि कैसे sudo को वास्तव में उपयोग किया जाना चाहिए।
स्पेंसर विलियम्स

6
विज़्डो को आपके ईडीआईटोर में जो भी उपयोग करने के लिए कॉन्फ़िगर किया गया है उसे खोलना चाहिए, जो बहुत अच्छी तरह से हो सकता है (और होना चाहिए ^ _ ^) vi।
मैट स्टाइल्स

8
सुनिश्चित करें कि NOPASSWD मैथिंग लाइन किसी भी अन्य sudo लाइनों के बाद है जो मेल कर सकते हैं (जैसे% पहिया) जिसमें NOPASSWD झंडा नहीं है।
एंथनी

27
मैं "sudo visudo" नहीं कर सकता क्योंकि मैं पहली बार sudo नहीं कर सकता!
गोबट्रॉन

8
/Etc/sudoers.d में एक फ़ाइल जोड़ने और विज़ूड फ़ाइल को अछूता छोड़ने पर विचार करें।
xlttj

183

प्रयत्न:

  1. NOPASSWDसभी कमांड के लिए लाइन का उपयोग करें , मेरा मतलब है:

    jenkins ALL=(ALL) NOPASSWD: ALL
    
  2. sudoersफाइल में अन्य सभी लाइनों के बाद लाइन लगाएं।

मेरे लिए (उबंटू 14.04) काम किया।


13
मैंने पहली बार अन्य उपयोगकर्ता कॉन्फ़िगरेशन के बाद लाइन को जोड़ा, लेकिन यह केवल तब काम किया जब 14.04.1 ल्यूबंट पर फ़ाइल में बिल्कुल अंतिम पंक्ति के रूप में रखा गया।
user77115

दूसरा भाग समाधान था जो मुझे चाहिए था। एक मौजूदा कॉन्फ़िगरेशन लाइन (व्हील समूह के लिए) ने भी मेरे sudo कमांड का मिलान किया, लेकिन NOPASSWD: एंट्री के बिना। मेरी नई लाइन को रखने के बाद इसे प्राथमिकता दी गई, जिससे मुझे आवश्यक विशिष्ट कमांड के लिए कोई पासवर्ड उपयोग करने की अनुमति नहीं मिली।
एंथनी

5
जैसा कि @ user77115 ने उल्लेख किया था, यह केवल तभी काम करता था जब आपने इसे sudoers फ़ाइल में अंतिम पंक्ति के रूप में रखा, यहां तक ​​कि Ubuntu 16.04 के साथ भी। एक साइड नोट के रूप में, सभी कमांड के लिए जेनकींस को सुडोल परमिशन देना एक बहुत बड़ी सुरक्षा चिंता है। अपनी जेनकींस लिपियों को लपेटने पर विचार करें और केवल विशिष्ट कमांड जैसे:jenkins ALL=(ALL) NOPASSWD: /var/lib/jenkins/wrapper_script
ivandov

jenkinsसिर्फ एक उपयोगकर्ता नाम है? यह होस्ट मशीन से उपयोगकर्ता का उपयोगकर्ता नाम होना चाहिए? क्या होगा यदि होस्ट मशीन पर उपयोगकर्ता का नाम रिमोट सर्वर से उपयोगकर्ता नाम से मेल खाता है?
मर्ग्लोम

यह जेनकिंस विशिष्ट है, जैसा दिखता है stackoverflow.com/a/22651598/1041319 अधिक सामान्य समाधान है।
arntg

167

प्रयत्न:

ssh -t remotehost "sudo <cmd>"

यह उपरोक्त त्रुटियों को दूर करेगा।


7
-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machineइसे भी देखें: sudo-no-tty-present-and-no-askpass-program-specific इसके अलावा एकपासपास प्रोग्राम sudo -Aसेट करने की अनुमति देता है sudo, लेकिन मैं केवल GUIs देखता हूं। क्या किसी को अनुमति देने के लिए एक पूछ-पता है ssh remotehost sudo -A askpass?
यहाँ

1
सुधार, तर्क के -Aलिए sudoनहीं लेता है और इसके बजाय पर्यावरण SUDO_ASKPASSया sudo.conf तो ssh remotehost sudo -A commandअभी भी काम करना होगा। फिर भी एक टर्मिनल आधारित आस्कपास कार्यक्रम के बारे में उत्सुक।
यहाँ

7
यह मेरे लिए काम नहीं करता है (संभवत: क्योंकि मैं स्क्रिप्ट से ssh कह रहा हूं), मुझे त्रुटि दे रहा है Pseudo-terminal will not be allocated because stdin is not a terminal.:(
knocte

मेरे लिए महान काम करता है। धन्यवाद!
xfra35

1
इस सवाल का जवाब नहीं है।
bschlueter

125

सभी विकल्पों के बाद, मैंने पाया:

sudo -S <cmd>

-S (स्टडिन) विकल्प sudo को टर्मिनल डिवाइस के बजाय मानक इनपुट से पासवर्ड पढ़ने का कारण बनता है।

स्रोत

ऊपर से कमांड को अभी भी पासवर्ड दर्ज करने की आवश्यकता है। जेंकिंस जैसे मामलों में मैन्युअल रूप से पासवर्ड दर्ज करने को हटाने के लिए, यह कमांड काम करता है:

echo <password> | sudo -S <cmd> 

यह मेरा मुद्दा ठीक कर रहा है। लेकिन क्या इस कमांड का उपयोग करने से कोई दुष्प्रभाव होता है?
Xiaodong क्यूई

3
sudo -S <command>- trueबस एक डमी कमांड होता है जो 0 का एग्जिट कोड देता है ( falseएक कमांड जो 1 रिटर्न करता है)। धन्यवाद, यह एक सच्चा उत्तर है, क्योंकि अन्य सभी "सुडो" काम करने की उम्मीद करते हैं!
एडम प्लोचर

1
-S: मानक त्रुटि के लिए प्रॉम्प्ट लिखें और टर्मिनल डिवाइस का उपयोग करने के बजाय मानक इनपुट से पासवर्ड पढ़ें। पासवर्ड के बाद एक नया चरित्र होना चाहिए।
फाइलिनस्टर

यह तुरंत काम करता है, और समय-समय पर सुडोकू काम कर सकता है, लेकिन जो भी अंतर्निहित समस्याएं मौजूद हैं उन्हें संबोधित नहीं कर सकता है और समस्या वापस आ सकती है।
nealmcb 14

मुझे नहीं पता कि अगर यह काम कर रहा है, लेकिन इसका प्रदर्शन Password:तो कुछ नहीं होता है। मैं पासवर्ड में टाइप नहीं कर सकता।
इचिमारू

43

sudoडिफ़ॉल्ट रूप से संलग्न टर्मिनल से पासवर्ड पढ़ेंगे। आपकी समस्या यह है कि netbeans कंसोल से चलने पर कोई टर्मिनल संलग्न नहीं होता है। तो आपको पासवर्ड दर्ज करने के लिए एक वैकल्पिक तरीके का उपयोग करना होगा: जिसे आस्कपास प्रोग्राम कहा जाता है ।

Askpass कार्यक्रम के लिए एक विशेष कार्यक्रम है, लेकिन किसी भी प्रोग्राम है कि पासवर्ड के लिए पूछ सकते हैं नहीं है। उदाहरण के लिए मेरे सिस्टम में x11-ssh-askpassठीक काम करता है।

ऐसा करने के लिए आपको पर्यावरण चर के साथ या तो किस प्रोग्राम का उपयोग करना है, यह निर्दिष्ट करना होगा SUDO_ASKPASS या sudo.confफ़ाइल में ( man sudoविवरण के लिए देखें)।

आप sudoविकल्प का उपयोग करके Askpass प्रोग्राम का उपयोग करने के लिए बाध्य कर सकते हैं -A। डिफ़ॉल्ट रूप से यह इसका उपयोग केवल तभी करेगा जब संलग्न टर्मिनल नहीं होगा।


वर्तमान समाधान के लिए एक गुई की आवश्यकता होती है। टर्मिनल पर एक्सेपास प्रोग्राम क्या काम करता है।
यहाँ

@ यहां: ठीक है ... यदि आप किसी टर्मिनल से ssh चलाते हैं, तो यह सीधे पासवर्ड मांगेगा, आपको किसी विशेष चीज की आवश्यकता नहीं है ... या क्या आप किसी दूसरे टर्मिनल से पासवर्ड के बारे में अनुरोध करने के बारे में पूछ रहे हैं ssh सत्र चलाएं?
रॉडरिगो

1
आह अब मैं देखता हूं कि -Aतर्क नहीं लेते। -Aपर्यावरण SUDO_ASKPASSया एक sudo.confफ़ाइल की आवश्यकता है । उस स्थिति में, ssh host "export SUDO_ASKPASS=askpass;sudo -A cat /etc/passwd"अभी भी एक टर्मिनल आधारित पूछ के साथ काम करेगा, हालांकि @ चंद्रू नीचे अधिक संक्षिप्त हैssh -t ...
यहाँ

-A का उपयोग करने के साथ कुछ कैवेट हैं। पहले, यदि A का उपयोग किया जाता है और SUDO_ASKPASS सेट नहीं किया गया है तो आपको एक त्रुटि मिलेगी। दूसरा, जब AA का उपयोग किया जाता है तो कैश की गई क्रेडेंशियल्स का उपयोग नहीं किया जाएगा, यह हमेशा एक पासवर्ड का अनुरोध करेगा।
एंथनी

एक adendum के रूप में आप पासवर्ड इनपुट कार्यक्रमों पर मेरे नोट को देखने के लिए पसंद कर सकते हैं ... ict.griffith.edu.au/anthony/info/crypto/passwd_input.txt
एंथोनी

26

Ubuntu 16.04 उपयोगकर्ताओं के लिए

एक फाइल है जिसे आपको पढ़ना है:

cat /etc/sudoers.d/README

निम्नलिखित सामग्री के साथ /etc/sudoers.d/myuser में मोड 0440 के साथ एक फ़ाइल रखना:

myuser  ALL=(ALL) NOPASSWD: ALL

समस्या को ठीक करना चाहिए।

को मत भूलो:

chmod 0440 /etc/sudoers.d/myuser

अच्छा लगा। लोकप्रिय समाधान की तुलना में क्लीनर समाधान।
पॉल प्रीत

2
आँख बंद करके इसका पालन न करें। मैंने /etc/sudoers.d में एक नई फ़ाइल बनाई है, जैसा कि यहाँ वर्णित है और समाप्त हो गया है कि अब मैं sudo का उपयोग नहीं कर पा रहा हूँ .. पुनर्प्राप्ति मोड के माध्यम से फ़ाइल को हटाना पड़ा।
Stian

25

इसको आजमाओ:

echo '' | sudo -S my_command

यह मेरे लिए काम करता है, लेकिन क्या कोई यह समझा सकता है कि यह मदद क्यों करता है?
ओलोलोबस

@ololobus आप पासवर्ड दर्ज करने के लिए पहले संकेत देने के लिए एक खाली पासवर्ड भेजते हैं
निकिता कोकश्रोव

काम किया! उच्चतर रेटेड उत्तर में से किसी ने भी मेरे लिए इसे हल नहीं किया।
drerD

1
यह त्रुटि के बाद लौटता है: [sudo] password for alper: Sorry, try again. [sudo] password for alper: sudo: 1 incorrect password attempt @sNICkerssss
alper

16

अगर किसी भी तरह से आप यहाँ आए क्योंकि आप विंडोज 10 के साथ आने वाले उबंटू के अंदर नहीं जा सकते

  1. विंडोज से नोटपैड के साथ / etc / मेजबानों को संपादित करें, यह यहां स्थित होगा: %localappdata\lxss\rootfs\etcजोड़ें 127.0.0.1 WINDOWS8, इससे पहली त्रुटि से छुटकारा मिलेगा कि यह होस्ट नहीं ढूंढ सकता है।

  2. no tty presentत्रुटि से छुटकारा पाने के लिए , हमेशा करेंsudo -S <command>


2
उन लोगों के लिए एक उत्तर प्रदान करने के लिए धन्यवाद, जो एक कारण के लिए यहां आए थे, जो कि प्रश्न के विवरण से संबंधित नहीं थे, लेकिन प्रश्न शीर्षक से मेल खाते थे। +1
जयंत भावल


15

अपने लिनक्स में लॉगिन करें। आग निम्नलिखित आदेशों। सावधान रहें, क्योंकि सुडोल का संपादन एक जोखिम भरा प्रस्ताव है।

$ sudo visudo

एक बार vi संपादक खुलने के बाद निम्नलिखित बदलाव करता है:

  1. टिप्पणी दें Defaults requiretty

    # Defaults    requiretty
    
  2. फ़ाइल के अंत में जाएं और जोड़ें

    jenkins ALL=(ALL) NOPASSWD: ALL
    


11

यह मेरे लिए काम किया:

echo "myuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

जहाँ आपका उपयोगकर्ता "myuser" है

एक डॉकर छवि के लिए, बस यही होगा:

RUN echo "myuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

9

सुनिश्चित करें कि आपके द्वारा किया गया कमांड आपका sudoहिस्सा हैPATH

यदि आपके पास एकल (या बहु, लेकिन सभी नहीं) कमांड sudoersप्रविष्टि है, तो आप इसे प्राप्त करेंगेsudo: no tty present and no askpass program specified तब जब कमांड आपके पथ का हिस्सा नहीं है (और पूर्ण पथ निर्दिष्ट नहीं है)।

आप इसे अपने आदेश में जोड़कर PATHया इसे निरपेक्ष मार्ग से लागू कर सकते हैं, अर्थात

sudo /usr/sbin/ipset

के बजाय

sudo ipset


1
यह वास्तव में मेरे लिए कांटा है। in sudoers %sitd ALL=(lamparna) NOPASSWD: /usr/bin/git_push_to_lamparna.sh, /usr/bin/gitऔर sudo -u lamparna git push --mirror ssh://lamparna@REDMINE/home/lamparna/repos/git/jine/lamparna.gitgit पोस्ट-अपडेट हुक रिटर्न no ttyमें उपयोग sudo -u lamparna /usr/bin/git push --mirror ssh://lamparna@REDMINE/home/lamparna/repos/git/jine/lamparna.gitकरना , लेकिन पासवर्ड के बिना काम का उपयोग करना।
फोटॉन

7

आदेश sudo विफल हो जाती है क्योंकि यह रूट पासवर्ड पर संकेत देने की कोशिश कर रहा है और इसमें कोई छद्म ट्टी आवंटित नहीं है (जैसा कि यह स्क्रिप्ट का हिस्सा है)।

इस कमांड को चलाने के लिए आपको या तो लॉग-इन के रूप में या अपने /etc/sudoers (या :) में निम्नलिखित नियमों को सेट करने की आवश्यकता है sudo visudo:

# Members of the admin group may gain root privileges.
%admin  ALL=(ALL) NOPASSWD:ALL

फिर सुनिश्चित करें कि आपका उपयोगकर्ता adminसमूह (या wheel) से संबंधित है।

आदर्श रूप से (सुरक्षित) यह केवल विशेष आदेशों के लिए रूट विशेषाधिकार को सीमित करना होगा, जिसे निर्दिष्ट किया जा सकता है %admin ALL=(ALL) NOPASSWD:/path/to/program


मुझे पता है, यह बहुत सुरक्षित तरीका है। हालाँकि, मैंने sudoersफ़ाइल में निम्न कमांड लिखा था, apache ALL = (ALL) NOPASSWD:/usr/share/apache-tomcat-7.0.61/bin/startup.shलेकिन यह मेरे लिए काम नहीं करता है। यह निम्नलिखित त्रुटि देता हैsudo: >>> /etc/sudoers: syntax error near line 120 <<< sudo: parse error in /etc/sudoers near line 120 sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin
मुआज़

1
BTW, यह अच्छी तरह से काम करता है apache ALL=(ALL) NOPASSWD: ALLलेकिन एक सुरक्षा जोखिम है। :)
मुआज़

6

मुझे लगता है कि मैं अपने मामले में किसी की मदद कर सकता हूं।

पहले, मैंने /etc/sudoersउपर्युक्त उत्तर के संदर्भ में उपयोगकर्ता सेटिंग बदल दी । लेकिन यह अभी भी काम नहीं किया।

myuser   ALL=(ALL) NOPASSWD: ALL
%mygroup  ALL=(ALL:ALL) ALL

मेरे मामले में, में myuserथा mygroup

और मुझे समूहों की आवश्यकता नहीं थी। तो, उस लाइन को हटा दिया।

(मेरी तरह उस लाइन को डिलीट नहीं करना चाहिए, केवल टिप्पणी को चिह्नित करना।)

myuser   ALL=(ALL) NOPASSWD: ALL

यह काम करता हैं!


3

जंकिन्स से उन में सूडो कमांड रखने वाली शेल स्क्रिप्ट चल रही हैं जो कि उम्मीद के मुताबिक नहीं चल सकती हैं। इसे ठीक करने के लिए, साथ पालन करें

सरल कदम:

  1. Ubuntu आधारित प्रणालियों पर, "$ sudo visudo" चलाएं

  2. यह / etc / sudoers फ़ाइल खोलेगा।

  3. यदि आपका जेंकिंस उपयोगकर्ता पहले से ही उस फ़ाइल में है, तो इस तरह दिखने के लिए संशोधित करें:

jenkins ALL = (ALL) NOPASSWD: ALL

  1. फ़ाइल सहेजें

  2. अपने जेनकींस नौकरी को फिर से शुरू करें

  3. आपको उस त्रुटि संदेश को दोबारा नहीं देखना चाहिए :)


3

मैं इसे पूरा करने में सक्षम था लेकिन कृपया ठीक से चरणों का पालन करना सुनिश्चित करें। यह उन लोगों के लिए है जिन्हें आयात त्रुटियां हो रही हैं।

Step1 : जांचें कि क्या फाइलों और फ़ोल्डरों को निष्पादन की अनुमति मिल गई है। लिनक्स उपयोगकर्ता उपयोग:

chmod 777 filename

चरण 2 : जांचें कि किस उपयोगकर्ता को इसे निष्पादित करने की अनुमति है।

Step3 : ओपन टर्मिनल इस कमांड को टाइप करें।

sudo visudo

इस लाइनों को नीचे दिए गए कोड में जोड़ें

www-data ALL=(ALL) NOPASSWD:ALL
nobody ALL=(ALL) NOPASSWD:/ALL

यह स्क्रिप्ट को निष्पादित करने और इसे सभी पुस्तकालयों का उपयोग करने की अनुमति देने के लिए है। उपयोगकर्ता आमतौर पर 'कोई नहीं' या 'www-data' है।

अब अपना कोड संपादित करें

echo shell_exec('sudo -u the_user_of_the_file python your_file_name.py 2>&1');

जाँच करने के लिए टर्मिनल पर जाएँ कि क्या प्रक्रिया इस प्रकार चल रही है ...

ps aux | grep python

यह अजगर में चल रही सभी प्रक्रिया का उत्पादन करेगा।

अपने सिस्टम में उपयोगकर्ताओं की जांच करने के लिए नीचे दिए गए कोड जोड़ें : का उपयोग करें

cut -d: -f1 /etc/passwd

धन्यवाद!


2

यह त्रुटि तब भी हो सकती है जब आप sudo lsरूबी प्रोग्राम से कुछ गैर-शेल स्क्रिप्ट, जैसे (बैकटिक्स में) से एक टर्मिनल कमांड (जिसमें रूट पासवर्ड) चलाने की कोशिश कर रहे हों । इस स्थिति में, आप एक्सपेक्ट यूटिलिटी ( http://en.wikipedia.org/wiki/Expect ) या इसके विकल्प का उपयोग कर सकते हैं ।
उदाहरण के लिए, रूबी में sudo lsबिना प्राप्त किए निष्पादित करने के लिए sudo: no tty present and no askpass program specified, आप इसे चला सकते हैं:

require 'ruby_expect'

exp = RubyExpect::Expect.spawn('sudo ls', :debug => true)
exp.procedure do
    each do
        expect "[sudo] password for _your_username_:" do
            send _your_password_
        end
    end
end

[यह टीसीएल एक्सटेंशन की उम्मीद करने के लिए विकल्पों में से एक का उपयोग करता है : रूबी_एक्सपर्ट मणि]।


2

संदर्भ के लिए, यदि कोई अन्य समान समस्या का सामना करता है, तो मैं इस त्रुटि के साथ एक अच्छे घंटे के दौरान फंस गया था जो कि तब नहीं होना चाहिए जब मैं NOPASSWD पैरामीटर का उपयोग कर रहा था।

मुझे नहीं पता था कि sudo ठीक उसी त्रुटि संदेश को बढ़ा सकता है जब कोई tty नहीं है और उपयोगकर्ता जिस लॉन्च की कोशिश करता है वह / etc / sudoers फ़ाइल में अनुमत कमांड का हिस्सा नहीं है।

यहाँ मेरे मुद्दे के साथ मेरी फ़ाइल सामग्री का एक सरल उदाहरण है:

bguser ALL = NOPASSWD: \
    command_a arg_a, \
    command_b arg_b \
    command_c arg_c

जब bguser "sudo कमांड_ बी arg_b" को बिना किसी tty (कुछ डेमॉन के लिए उपयोग किए जा रहे bguser) को लॉन्च करने का प्रयास करेगा, तो वह "कोई tty वर्तमान और कोई पूछे जाने वाले प्रोग्राम निर्दिष्ट नहीं" त्रुटि का सामना करेगा।

क्यों?

क्योंकि / etc / sudoers फ़ाइल में लाइन के अंत में एक अल्पविराम गायब है ...

(मुझे आश्चर्य है कि अगर यह एक अपेक्षित व्यवहार है और सुडो में बग नहीं है क्योंकि इस तरह के मामले के लिए सही त्रुटि संदेश "क्षमा करें, उपयोगकर्ता bguser को निष्पादित करने की अनुमति नहीं है")


2

मुझे यह त्रुटि मिल रही थी क्योंकि मैंने अपने उपयोगकर्ता को केवल एक ही निष्पादन योग्य 'सिस्टेमक्टल' तक सीमित कर दिया था और उसने विडियो फ़ाइल को गलत तरीके से समझा था।

यहाँ मेरे पास क्या है:

jenkins ALL=NOPASSWD: systemctl

हालाँकि, आपको निष्पादन योग्य के लिए पूर्ण पथ शामिल करना होगा, भले ही वह डिफ़ॉल्ट रूप से आपके पथ पर हो, उदाहरण के लिए:

jenkins ALL=NOPASSWD: /bin/systemctl

यह मेरे जेनकींस उपयोगकर्ता को सेवाओं को फिर से शुरू करने की अनुमति देता है लेकिन पूरी रूट एक्सेस नहीं है


1

किसी ने यह नहीं बताया कि इस त्रुटि का कारण क्या हो सकता है, एक मेजबान से दूसरे में प्रवास के मामले में, sudoers फ़ाइल में hostname की जाँच के बारे में याद रखें:

तो यह मेरा / etc / sudoers config है

User_Alias      POWERUSER = user_name
Cmnd_Alias SKILL = /root/bin/sudo_auth_wrapper.sh
POWERUSER hostname=(root:root) NOPASSWD: SKILL

अगर यह मेल नहीं खाता

uname -a
Linux other_hostname 3.10.17 #1 SMP Wed Oct 23 16:28:33 CDT 2013 x86_64 Intel(R) Core(TM) i3-4130T CPU @ 2.90GHz GenuineIntel GNU/Linux

यह इस त्रुटि को पॉप अप करेगा:

कोई tty मौजूद नहीं है और कोई askpass कार्यक्रम निर्दिष्ट नहीं है


1

अन्य विकल्प, NOPASSWD पर आधारित नहीं हैं:

  • Netbeans को रूट विशेषाधिकार ((sudo netbeans) या समान) के साथ प्रारंभ करें जो संभवतः रूट के साथ बिल्ड प्रक्रिया को कांटा जाएगा और इस प्रकार sudo स्वचालित रूप से सफल होगा।
  • उन कार्यों को करें जिन्हें आपको suexec करने की आवश्यकता है - उन्हें रूट के स्वामित्व में करें, और मोड को 4755 पर सेट करें। (यह निश्चित रूप से मशीन पर किसी भी उपयोगकर्ता को उन्हें चलाने देगा।) इस तरह, उन्हें sudo की बिल्कुल भी आवश्यकता नहीं है।
  • बूटर्स के साथ वर्चुअल हार्ड डिस्क फ़ाइलों का निर्माण करने के लिए सूडो की आवश्यकता नहीं होनी चाहिए। फाइलें सिर्फ फाइलें हैं, और बूटसेक्टर सिर्फ डेटा हैं। यहां तक ​​कि वर्चुअल मशीन को रूट की आवश्यकता नहीं होनी चाहिए, जब तक कि आप उन्नत डिवाइस अग्रेषण न करें।

1

हो सकता है कि यह सवाल स्पष्ट न हो कि कोई उत्तर इसका मिलान क्यों नहीं कर रहा था, लेकिन मेरे पास एक ही त्रुटि संदेश था जब मैं sshfs माउंट करने की कोशिश कर रहा था, जिसमें sudo की आवश्यकता थी: कमांड कुछ इस तरह है:

sshfs -o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server" user@my.server.tld:/var/www /mnt/sshfs/www

विकल्प जोड़कर -o debug

sshfs -o debug -o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server" user@my.server.tld:/var/www /mnt/sshfs/www

मेरे पास इस प्रश्न का एक ही संदेश था:

sudo: no tty present and no askpass program specified

तो दूसरों के जवाब को पढ़कर मैं /etc/sudoer.d/usermy.server.tld पर एक फ़ाइल बनाने के लिए बन गया :

user ALL=NOPASSWD: /usr/lib/openssh/sftp-server

और अब मैं अपने उपयोगकर्ता को बहुत अधिक अतिरिक्त अधिकार दिए बिना ड्राइव को माउंट करने में सक्षम हूं।


0

हालाँकि यह प्रश्न पुराना है, फिर भी यह मेरी कमोबेश अप-टू-डेट प्रणाली के लिए प्रासंगिक है। सूडो ( Debug sudo /var/log/sudo_debug all@infoइन /etc/sudo.conf) के डिबग मोड को सक्षम करने के बाद मुझे / dev: " /dev is world writable" की ओर इशारा किया गया । तो आपको tty फ़ाइल अनुमतियों की जाँच करने की आवश्यकता हो सकती है , विशेष रूप से उन निर्देशिकाओं की जहाँ tty / pts नोड रहता है।


0

यदि आप इस लाइन को अपने /etc/sudoers( जोड़कर) जोड़ते हैं, तो यह visudoआपके पासवर्ड को दर्ज करने के लिए अक्षम किए बिना इस समस्या को ठीक कर देगा और जब एक उपनाम sudo -Sकाम नहीं करेगा (स्क्रिप्ट कॉलिंग sudo):

Defaults visiblepw

बेशक इसे समझने के लिए मैनुअल को स्वयं पढ़ें , लेकिन मुझे लगता है कि एलएक्सडी कंटेनर में चलने के मेरे उपयोग के मामले में lxc exec instance -- /bin/bashइसकी बहुत सुरक्षित है क्योंकि यह नेटवर्क पर पासवर्ड को प्रिंट नहीं कर रहा है।


0

पाइपलाइन का उपयोग करना:

echo your_pswd | sudo -S your_cmd

यहां दस्तावेज़ का उपयोग करना:

sudo -S cmd <<eof
pwd
eof
#remember to put the above two lines without "any" indentations.

पासवर्ड पूछने के लिए एक टर्मिनल खोलें (जो भी काम करता है):

gnome-terminal -e "sudo cmd"
xterm -e "sudo cmd"

-1

1 खुला / आदि / sudoers

टाइप करें sudo vi /etc/sudoers। इससे आपकी फाइल एडिट मोड में खुल जाएगी।

2 लिनक्स उपयोगकर्ता जोड़ें / संशोधित करें

लिनक्स उपयोगकर्ता के लिए प्रविष्टि देखें। नीचे के रूप में संशोधित अगर पाया या एक नई लाइन जोड़ें।

<USERNAME> ALL=(ALL) NOPASSWD: ALL

3 संपादन मोड से सहेजें और बाहर निकलें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.