2012-05-15 7 views
6

उदाहरण के लिए, अगर मैं एक स्क्रिप्ट कह दिया है कहते हैं:स्वचालित रूप से इनपुट एक पासवर्ड जब एक bash स्क्रिप्ट चलाया जाता है

#!/bin/bash 
sudo setpci -s 00:02.0 F4.B=00 

मैं कैसे इतना है कि यह पासवर्ड जब के रूप में यह स्वीकार करता है स्क्रिप्ट में रूट पासवर्ड रखूँ यह सुडो लाइन को पढ़ता है और निष्पादित करता है (इसलिए मुझे इसे मैन्युअल रूप से टाइप करने की आवश्यकता नहीं है)?

उत्तर

24

आपकी बैश स्क्रिप्ट के भीतर expect सत्र स्पॉइंग आमतौर पर आप इंटरैक्टिव संकेतों को स्वचालित करते हैं।

उदा।

expect -c " 
spawn sudo setpci -s 00:02.0 F4.B=00 
expect -nocase \"password:\" {send \"$PASS\r\"; interact} 
" 

ध्यान दें कि यह इस मामले में दृष्टिकोण की सिफारिश के रूप में यह एक विशाल सुरक्षा छेद एक bash स्क्रिप्ट में अपने रूट पासवर्ड स्टोर करने के लिए है नहीं है।

सही समाधान आपके /etc/sudoers/ को संपादित करना होगा ताकि आप उस बाइनरी के लिए पासवर्ड के लिए संकेत न दें।

#in /etc/sudoers 
neohexane ALL=(ALL) NOPASSWD : /usr/bin/setpci 
+1

क्या कोई कारण है कि आप '/ etc/sudoers /' दृष्टिकोण का उपयोग नहीं कर सकते हैं। यह मेरा पुनर्मूल्यांकन होगा। – cmh

+3

"अनुशंसित नहीं है" एक अल्पमत की तरह लगता है। मैं उम्मीद समाधान पूरी तरह से हटा दूंगा। जब तक कि यह उसका अपना व्यक्तिगत बॉक्स न हो, वह बिल्कुल सादा पाठ फ़ाइल में चारों ओर स्थित रूट पासवर्ड नहीं छोड़ना चाहिए। – chepner

+2

मुझे लगता है कि उम्मीद का उपयोग कैसे करें इसका एक उदाहरण के रूप में रखना उचित है। मैं जोर दूंगा कि इसकी सिफारिश क्यों नहीं की जाती है। – cmh

संबंधित मुद्दे