2010-04-16 6 views
39

मैं एक प्रोग्राम के साथ पासवर्ड के निष्पादन को सुरक्षित करना चाहता हूं।बैश स्क्रिप्ट को पासवर्ड के लिए कैसे पूछें?

मैं इसे बैश में कैसे कर सकता हूं?

+1

अस्पष्ट के रूप में बंद करने के लिए वोटिंग, कृपया निर्दिष्ट करें कि आप अन्य इनपुट से अलग होने के लिए पासवर्ड इनपुट कैसे चाहते हैं। कोई गूंज नहीं पूछा: http://stackoverflow.com/questions/3980668/how-to-get-a-password-from-a-shell-script-without-echoing –

उत्तर

48
stty_orig=`stty -g` # save original terminal setting. 
stty -echo   # turn-off echoing. 
read passwd   # read the password 
stty $stty_orig  # restore terminal setting. 
73

यह आदेश (गूंज विकलांग के साथ) वर pwd stdin से में पढ़ा जाएगा:

IFS= read -s -p Password: pwd 

unsetting आईएफएस प्रमुख और पासवर्ड में खाली स्थान के (जो कुछ वातावरण में समर्थन किया जा सकता अनुगामी के लिए अनुमति देगा , उपयोगकर्ता स्क्रिप्ट के आपके स्क्रिप्ट के इनपुट के दौरान इसका समर्थन करने के लिए सबसे अच्छा)

अग्रणी/पीछे वाली व्हाइटस्पेस को मान्य करने के लिए उचित रूप से संभाला जा सकता है आप इसका उपयोग कर सकते हैं:

echo -n "$pwd" | hexdump -C 

नोट: असली पासवर्ड के साथ उपयोग न करें क्योंकि यह कंसोल पर डंप करता है!

एचटी: आईएफएस अनसेटिंग पर इस अतिरिक्त जानकारी के लिए रॉन डुप्लेन।

+3

क्या कोई नुकसान है यदि मैंने इसका उपयोग किया स्वीकृत उत्तर? – Triztian

+7

@Triztian हां, उपर्युक्त शायद केवल बैश में काम करेगा। स्वीकार्य उत्तर सबसे अधिक (सभी?) गोले पर काम करना चाहिए। – jberryman

4

यदि आपको किसी प्रोग्राम के लिए एक पैरामीटर के रूप में आपूर्ति करने के लिए पासवाड पकड़ने की आवश्यकता है, तो गूंज को बंद करने के लिए यूनिकॉर्न सलाह अच्छी है।
स्क्रिप्ट में पासवॉड चेक होने पर काम नहीं होता है - यदि उपयोगकर्ता बैश स्क्रिप्ट निष्पादित कर सकता है तो उन्हें इसे पढ़ने और पासवुड देखने की अनुमति भी है।

यदि आप केवल एक प्रोग्राम चलाने के लिए पासवाड वाले लोगों को अनुमति देना चाहते हैं तो सुरक्षित तरीका एक नया उपयोगकर्ता खाता बनाना है जो प्रोग्राम का मालिक है और उस स्क्रिप्ट का उपयोग करें जो प्रोग्राम को चलाने के लिए 'सुडो' का उपयोग करता है - यह उपयोगकर्ताओं को सुरक्षित तरीके से पास करने के लिए संकेत देगा।

+1

कोई पासवर्ड के चेकसम को प्रीकंप्यूट कर सकता है और सादे टेक्स्ट की बजाय स्क्रिप्ट में * इसे * स्टोर कर सकता है और इसके खिलाफ इनपुट के चेकसम का परीक्षण कर सकता है। हालांकि, यह अभी भी टूटा जा सकता है, लेकिन कम आसानी से। –

+1

इस मामले में आप बस स्क्रिप्ट को कहीं कहीं कॉपी करते हैं, आपके पास लिखने की अनुमति है, और चेक को हटा दें। –

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