मैं एक और समाधान का प्रस्ताव करना चाहता हूं:
- name: Create madhead user
user:
name: madhead
password: "{{ 'password' | password_hash('sha512') }}"
shell: /bin/zsh
update_password: on_create
register: madhead
- name: Force madhead to change password
shell: chage -d 0 madhead
when: madhead.changed
यह बेहतर क्यों है? जैसे पहले से ही यहाँ उल्लेख किया गया है, अंसिबल नाटकों को उदासीन होना चाहिए। आपको उन्हें अनिवार्य शैली में कार्रवाई के अनुक्रम के रूप में नहीं, बल्कि एक वांछित राज्य, घोषणात्मक शैली की तरह सोचना चाहिए। परिणामस्वरूप आपको इसे कई बार चलाने और एक ही परिणाम प्राप्त करने में सक्षम होना चाहिए, एक ही सर्वर स्थिति।
यह सब बहुत अच्छा लगता है, लेकिन कुछ बारीकियां हैं। उनमें से एक उपयोगकर्ताओं का प्रबंधन कर रहा है। "वांछित राज्य" का मतलब है कि हर बार जब आप एक नाटक चलाते हैं जो एक उपयोगकर्ता बनाता है तो उसे उस राज्य से मिलान करने के लिए अपडेट किया जाएगा। "अपडेटेड" से मेरा मतलब है कि उसका पासवर्ड भी बदल दिया जाएगा। लेकिन शायद यह वह नहीं है जिसकी आपको जरूरत है। आमतौर पर, आपको केवल एक बार अपना पासवर्ड बनाने, सेट करने और समाप्त करने की आवश्यकता होती है, आगे खेलने के लिए अपने पासवर्ड को अपडेट नहीं करना चाहिए।
सौभाग्य से, Ansible के पास मॉड्यूलupdate_password
में विशेषता है जो इस मुद्दे को हल करती है। इसे रजिस्टर्ड वैरिएबल के साथ मिलाने पर आप उसका पासवर्ड भी तभी समाप्त कर सकते हैं जब यूजर वास्तव में अपडेट हो।user
ध्यान दें कि यदि आप उपयोगकर्ता के शेल को मैन्युअल रूप से बदलते हैं (मान लें, तो आपको वह शेल पसंद नहीं है, जिसे उसके खेलने के लिए मजबूर किया गया है) उपयोगकर्ता को अपडेट किया जाएगा, इस प्रकार उसका पासवर्ड समाप्त हो जाएगा।
यह भी ध्यान दें कि आप नाटकों में सादा पाठ प्रारंभिक पासवर्ड का आसानी से उपयोग कैसे कर सकते हैं। उन्हें कहीं और एनकोड करने और हैश पेस्ट करने की आवश्यकता नहीं है, आप इसके लिए जिनजा 2 फिल्टर का उपयोग कर सकते हैं । हालाँकि, यह एक सुरक्षा दोष हो सकता है यदि कोई आपके शुरू में करने से पहले लॉगिन करता है।
password
सादे पाठ में नहीं होना चाहिए, बल्कि पहले से होना चाहिए।