पासवर्ड को प्रोग्रामेटिक रूप से बदलें


12

रास्पियन के वर्तमान संस्करण में, मुझे पता है कि कमांड लाइन से उपयोगकर्ता में वर्तमान लॉग के पासवर्ड को बदलना संभव है जैसे:

sudo passwd

जो तब उपयोगकर्ता को दो बार एक नया पासवर्ड दर्ज करने के लिए संकेत देगा। यह इस तरह उत्पादन का उत्पादन करेगा:

Changing password for pi.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

मैं सोच रहा था कि क्या शेल स्क्रिप्ट से प्रोग्राम को पासवर्ड बदलने का एक संभव तरीका है।

मैं अपने रास्पबेरी पेस्ट पर तैनात करने के लिए एक विन्यास स्क्रिप्ट बनाने की कोशिश कर रहा हूं और मैं मैन्युअल रूप से उनके लिए नए पासवर्ड टाइप नहीं करना चाहता।


1
वर्तमान उपयोगकर्ता का पासवर्ड बदलने के लिए आपको उपसर्ग करने की आवश्यकता नहीं है sudo। यदि आप उपयोग करते हैं sudoतो आप उस उपयोगकर्ता के वर्तमान पासवर्ड को जानने की आवश्यकता के बिना किसी भी उपयोगकर्ता के लिए एक नया पासवर्ड मजबूर कर सकते हैं।
रोजा

expect(1)के रूप में अच्छी तरह से मदद कर सकता है।
सेलोरायर

पासवर्ड बदलते समय सुरक्षा निहितार्थ पर विचार करना सुनिश्चित करें।
जोश हबदास

जवाबों:


19

आप chpasswdकमांड के लिए देख रहे हैं । आप ऐसा कुछ करेंगे:

echo 'pi:newpassword' | chpasswd # change user pi password to newpassword

ध्यान दें कि इसे रूट के रूप में चलाने की आवश्यकता है, कम से कम डिफ़ॉल्ट PAM कॉन्फ़िगरेशन के साथ। लेकिन संभवतः रूट के रूप में चलाए जाने से सिस्टम परिनियोजन स्क्रिप्ट के लिए कोई समस्या नहीं है।

इसके अलावा, आप कई उपयोगकर्ताओं को एक बार इनपुट की कई पंक्तियों को फीड करके कर सकते हैं।


9

एक अन्य विकल्प yesआपकी स्क्रिप्ट में कमांड का उपयोग करना है ।

yes newpassword | passwd youruser

इसके newpasswordलिए passwdकमांड भेजेगा youruser

यह उल्लेख किया जाना चाहिए कि स्क्रिप्ट के माध्यम से उपयोगकर्ता पासवर्ड सेट / संशोधित करना सुरक्षा जोखिम पेश कर सकता है और जब भी संभव हो, इससे बचना चाहिए।

संपादित करें:

इस उत्तर के लिए रूट एक्सेस की आवश्यकता है। इसके पहले उल्लेख नहीं करने के लिए क्षमा याचना। यह एक विधि है जिसका उपयोग मैं प्रशासन कार्यों को करते समय करता हूं, जिन्हें रूट एक्सेस की आवश्यकता होती है।


क्या आपने यह कोशिश की है?
रोज़ा

हाँ। मैं वर्षों से इस पद्धति का उपयोग कर रहा हूं। मैंने अपना उत्तर पोस्ट करने से पहले और अब बस फिर से इसका परीक्षण किया।
टिमोथी मार्टिन

यहां तक ​​कि यह मानते हुए कि एक टर्मिनल (कीबोर्ड) के बजाय से passwdपढ़ा stdin, यह कैसे काम कर सकता है जब passwdपहले उपयोगकर्ता के पुराने पासवर्ड के लिए संकेत देता है और फिर नए के लिए संकेत देता है?
रोजा

@roaima संभवत: टिमोथी इसे रूट के रूप में चलाता है (जो बताता है कि उसे youruserआखिर में इसकी आवश्यकता क्यों है )। यह कहीं न कहीं काम कर सकते हैं ...
derobert

1
@roaima passwdलिनक्स की छाया उपयोगिताओं से कमांड पुनर्निर्देशित इनपुट (जैसे ओपनएसएसएच के विपरीत ssh) को स्वीकार करता है । उपयोग करना yesएक अच्छा विचार नहीं है, हालांकि यह उन स्नूपर्स के लिए पासवर्ड को उजागर करता है जो गलत समय पर प्रक्रिया सूची को देखते हैं। उपयोग करने से echoयह दोष नहीं होगा क्योंकि यह शेल बिलिन है।
गिल्स एसओ- बुराई को रोकना '
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.