क्या मैं लिनक्स में एक यूजर पासवर्ड को कमांड लाइन से बिना अन्तरक्रियाशीलता के बदल सकता हूँ?


15

मेरे पास एक विशिष्ट उपयोग का मामला है जहां मैं वास्तव में उपयोगकर्ता के पासवर्ड को एक ही कमांड के साथ बदलने में सक्षम होना चाहता हूं जिसमें कोई इंटरैक्शन नहीं है। यह एक सुरक्षित तरीके से किया जा रहा है (एसएसएच पर, और केवल लॉग इन करने में सक्षम एक उपयोगकर्ता के साथ एक प्रणाली पर), इसलिए कमांड लाइन पर नए पासवर्ड (और यहां तक ​​कि पुराने को, यदि आवश्यक हो) को उजागर करना ठीक है। FWIW, यह एक उबंटू प्रणाली है।

मैं सिर्फ इस एक काम के लिए इस सिस्टम में कुछ Expect-like जोड़ने से बचना चाहता हूं।


3
उन लोगों के लिए जो FreeBSD पर ऐसा करना चाहते हैं:echo "newpassword" | pw usermod theusername -h 0
पॉल हॉफमैन

जवाबों:



5

आप पासवर्ड हैश (वास्तविक पासवर्ड नहीं) प्रदान करने usermodके -pविकल्प के साथ उपयोग कर सकते हैं । आप पासवर्ड हैश उत्पन्न कर सकते हैं जैसे कुछ mkpasswd -m sha-256याmkpasswd -m md5


1
... लेकिन मेरे AIX प्रणाली नहीं है usermod: '(- मैं सवाल पर टैग ठीक कर देंगे।
voretaq7

3

ज़रूर।

  1. अपने स्थानीय सिस्टम पर पासवर्ड हैश करें।
  2. दूरस्थ मशीन से कनेक्ट करें (जहाँ आप पासवर्ड बदलना चाहते हैं)
  3. एक रचनात्मक करने के लिए टुकड़ों में बंटी पासवर्ड और उपयोगकर्ता नाम फीड sedस्क्रिप्ट जो आपके सिस्टम का पासवर्ड फ़ाइल अद्यतन करता है ( /etc/shadow, /etc/master.passwd, जो कुछ भी यह होता है)।

1

passwdउपयोगिता एक --stdin विकल्प कहा गया है कि है:

इस विकल्प का उपयोग यह इंगित करने के लिए किया जाता है कि पासवार्ड को मानक इनपुट से नया पासवर्ड पढ़ना चाहिए, जो एक पाइप हो सकता है।

वाक्य - विन्यास:

echo "newpass" | passwd --stdin user1

भले ही आपने उल्लेख किया हो कि आप परवाह नहीं करते हैं, आप पासवर्ड को एक टेक्स्ट फ़ाइल में डाल सकते हैं और फिर cat pass.txtइको कमांड के बजाय कर सकते हैं, इस तरह यह बैश इतिहास में दिखाई नहीं देता है।


वही है वो। echo VerySecret | passwd --stdin username
17

5
मेरे उबंटू प्रणाली के --stdinलिए एक विकल्प के रूप में नहीं है passwd
जेफ फेरलैंड

आप सही हैं, यह नहीं है। मैंने एक CentOS सिस्टम और मैक पर दोनों की जाँच की और उनके पास --स्टैंडिन विकल्प है, इसलिए इसे हटाना एक उबंटू चीज़ होना चाहिए।
Safado

1
@RyanM। FreeBSD (और AFAIK NetBSD और OpenBSD, AIX, HP-UX और सोलारिस लास्ट I चेके) --stdinया तो समर्थन नहीं करते हैं - मुख्यतः क्योंकि यह एक बड़ा विशाल सुरक्षा छेद होने की प्रतीक्षा कर रहा है :-)
voretaq7

1
@quanta: या echo "newpass" | passwd --stdin user1एक स्थान के साथ लाइन शुरू ; इस तरह यह इतिहास को बिलकुल भी नहीं जाएगा।
जाॅन पिक्कारेंन डे

1

यदि --stdinविकल्प काम नहीं कर रहा है तो हम मूल रूप से दो विकल्पों का उपयोग कर सकते हैं:

  1. या तो chpaswdअपनी स्क्रिप्ट में एक और उपयोगिता का उपयोग करें।
  2. या उपयोग करें echo "current_password\nnew_password\nnew_password" | passwd user_name
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.