জবাবদিহি করে একটি নতুন ব্যবহারকারী এবং পাসওয়ার্ড তৈরি করা


103

আমার একটি উত্তরযোগ্য টাস্ক রয়েছে যা উবুন্টু 12.04 এ একটি নতুন ব্যবহারকারী তৈরি করে;

- name: Add deployment user
    action: user name=deployer password=mypassword

এটি প্রত্যাশিত হিসাবে সম্পূর্ণ হয় তবে আমি যখন সেই ব্যবহারকারী হিসাবে লগইন করি এবং পাসওয়ার্ডটি দিয়ে sudo করার চেষ্টা করি আমি সেটাকে সর্বদা ভুল বলে থাকি। আমি কি ভুল করছি?


1
আপনি কি একই পাসওয়ার্ড বা ssh কী দিয়ে লগ ইন করছেন? আপনার ছায়া ফাইলটি প্রত্যাশা মতো রয়েছে তা নিশ্চিত করার জন্য আপনি কি পরীক্ষা করেছেন? এছাড়াও আপনার passwordসরল পাঠ্যে নয় বরং পূর্বসূরিত হওয়ার কথা।
এমএক্সএক্স

আমার পাসওয়ার্ডটি সরলপাঠ্য, আমি কি সেভাবে ব্যবহার করতে পারি না? কীভাবে এটি এনক্রিপ্ট করা যায় তা আমি বুঝতে পারি না বা সত্যিই এটির দরকার হয়।
র‌্যাফেল_টর্টিল

উত্তর:


101

আপনি যদি userমডিউলটির জন্য আনসিবলের ম্যানুয়ালটি পড়েন তবে প্যারামিটারটি কীভাবে ব্যবহার করবেন সে সম্পর্কে বিশদ বিবরণের জন্য এটি আপনাকে উত্তরযোগ্য-উদাহরণ গিথুব রেপোতে পরিচালিত করবেpassword

সেখানে আপনি দেখতে পাবেন যে আপনার পাসওয়ার্ডটি অবশ্যই হ্যাশ করা উচিত।

- hosts: all
  user: root
  vars:
    # created with:
    # python -c 'import crypt; print crypt.crypt("This is my Password", "$1$SomeSalt$")'
    password: $1$SomeSalt$UqddPX3r4kH3UL5jq5/ZI.

  tasks:
    - user: name=tset password={{password}}

যদি আপনার প্লেবুক বা উত্তরযোগ্য কমান্ড লাইনের আপনার পাসওয়ার্ডটি সরল পাঠ্যে রয়েছে, তবে এর অর্থ আপনার ছায়া ফাইলে রেকর্ড করা আপনার পাসওয়ার্ড হ্যাশটি ভুল। এর অর্থ যখন আপনি নিজের পাসওয়ার্ড দিয়ে প্রমাণীকরণ করার চেষ্টা করবেন তখন এর হ্যাশ কখনও মিলবে না।

অতিরিক্তভাবে, পাসওয়ার্ডের প্যারামিটারের কিছু সংক্ষিপ্তকরণ এবং সঠিকভাবে এটি কীভাবে ব্যবহার করতে হয় সে সম্পর্কে উত্তরযোগ্য FAQ দেখুন ।


25
বখশিশের জন্য ধন্যবাদ. আমি কেবল এটি উল্লেখ করতে চেয়েছিলাম যে উপরের লিঙ্কযুক্ত ব্যবহারকারী মডিউল ডকুমেন্টেশনগুলি উপরের openssl passwd -salt <salt> -1 <plaintext>পাইথন ওয়ান-লাইনারের পরিবর্তে পাসওয়ার্ড হ্যাশ তৈরি করতে ব্যবহার করার পরামর্শ দেয়। পাইথন থেকে সঠিক আউটপুট পেতে আমার কিছুটা সমস্যা হয়েছিল, সম্ভবত আমার নিজের অক্ষমতার কারণে এবং ওপেনসেল কমান্ড আরও ভাল কাজ করেছে।
ব্রেন্ডন উড

6
ওএসের সাথে ব্যবহার করার জন্য আপনি কীভাবে লবণটি সিঙ্ক্রোনাইজ করবেন?
30:25 এপ্রিলের

5
@Breedly আছে: কোন প্রয়োজন নেই - লবণ সবসময় পাসওয়ার্ডের অংশ ($ 1 $ thesalt $ thepasswordhash) অর্থ এটি একই হ্যাশ ফাংশন ব্যবহার করে OSs মধ্যে পোর্টেবল হিসাবে সংরক্ষিত হয়
বেঞ্জামিন ডেল

3
এই পাইথন কমান্ডটি হ্যাশ তৈরির জন্য ব্যবহার করা আমার পক্ষে কার্যকর হয়নি। তবে /etc/shadowম্যানুয়ালি ব্যবহার করে পাসওয়ার্ড সেট করার পরে আমি হ্যাশটি পেয়েছি passwd <user>
ডকসপ্পার

172

এর জবাব দিতে আমার অনেক দেরি হতে পারে তবে সম্প্রতি আমি বুঝতে পেরেছিলাম যে জিনজা 2 ফিল্টারগুলির এনক্রিপ্ট করা পাসওয়ার্ডগুলির প্রজন্মটি পরিচালনা করার ক্ষমতা রয়েছে। আমার মধ্যে main.ymlআমি এনক্রিপ্ট হওয়া পাসওয়ার্ডটি এইভাবে উত্পন্ন করছি:

- name: Creating user "{{ uusername }}" with admin access
  user: 
    name: {{ uusername }}
    password: {{ upassword | password_hash('sha512') }}
    groups: admin append=yes
  when:  assigned_role  == "yes"

- name: Creating users "{{ uusername }}" without admin access
  user:
    name: {{ uusername }}
    password: {{ upassword | password_hash('sha512') }}
  when:  assigned_role == "no"

- name: Expiring password for user "{{ uusername }}"
  shell: chage -d 0 "{{ uusername }}"

"ইউজারনেম" এবং "আপসওয়ার্ড" --extra-varsপ্লেবুক হিসাবে পাস হয়েছে এবং বিজ্ঞপ্তি আমি পাসওয়ার্ড এনক্রিপ্ট করতে এখানে jinja2 ফিল্টার ব্যবহার করেছি।

আমি আমার ব্লগে এটি সম্পর্কিত টিউটোরিয়াল নীচে যুক্ত করেছি


6
আইটেমটি সর্বদা "পরিবর্তিত" থাকে তা এড়াতে, আপনি পাসওয়ার্ড_হ্যাশগুলিতে ২ য় প্যারামিটার হিসাবে একটি গোপন "নুন" যুক্ত করতে পারেন।
মাইকেল ওয়াইরাজ

11
@ মাইকেলওয়াইজের পরামর্শ অনুসারে: ২ য় "নুন" পরম যুক্ত করা "পরিবর্তিত" এড়ায়। আপনি এটি একটি ভেরিয়েবলের মাধ্যমে সেট করতে পারেন, যেমন password={{upassword|password_hash('sha512', upassword_salt)}}। এটি আপনাকে একটি ভেরিয়েবল ভল্টে লবণ রাখতে দেয় , সম্ভবত আপনি upasswordখুব ভালভাবেই ব্যবহার করবেন, উভয়কে টাস্কের বাইরে রাখুন ym
ব্যবহারকারী 85461

আমি ইতিমধ্যে @ বিবাআসসিএসির স্টেট-চেকিং প্রয়োগ করব এবং update_password: on_createইতিমধ্যে তৈরি করা ব্যবহারকারীদের পাসওয়ার্ডের মেয়াদ রোধ করতে এই উত্তরটিতে ব্যবহারকারী মডিউল যুক্ত করব।
ম্যাডহেড

আপনার দুর্দান্ত উদাহরণের জন্য ধন্যবাদ এটি আমাকে সঠিক পথে নিয়ে এসেছিল। তবুও এটিকে উত্তরীয় সংস্করণ ২.৮.২ সহ ম্যাকের সাথে কাজ করতে আমাকে আরও কিছু জিনিস করতে হয়েছিল things ম্যাকের মধ্যে সবার আগে ক্রিপ্ট ব্যবহার করা সম্ভব নয় সুতরাং এটির সাথে পাসলিব লাইব্রেরি ইনস্টল করা প্রয়োজন pip install passlib। এর পরে নিম্নলিখিত যোগে পুনরায় ফরম্যাট একটি ইনলাইন খিলান এনক্রিপ্ট স্ট্রিং আমার ছিল ব্যবহার করতে সক্ষম হতে হবে: password: {{ upassword | string | password_hash('sha512') }}। এটি ত্রুটির বার্তাটি এড়িয়ে চলেsecret must be unicode or bytes, not ansible.parsing.yaml.objects.AnsibleVaultEncryptedUnicode
মাইকেল আইশার

একটি পাসওয়ার্ড সেট করতে এই পদ্ধতিটি ব্যবহার করা সত্ত্বেও: "। {আমার_পাসওয়ার্ড | স্ট্রিং | পাসওয়ার্ড_হ্যাশ ('sha512')} I" আমি এখনও পাব - [সতর্কতা]: ইনপুট পাসওয়ার্ডটি হ্যাশ হয়েছে বলে মনে হচ্ছে না। এই মডিউলটি সঠিকভাবে কাজ করার জন্য 'পাসওয়ার্ড' যুক্তিটি অবশ্যই এনক্রিপ্ট করা উচিত।
ওপেনসিভিলিয়েশন

46

আমি আরও একটি সমাধান প্রস্তাব করতে চাই:

- 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

কেন এটা ভাল? ইতিমধ্যে এখানে উল্লেখ করা হয়েছে যে, উত্তরীয় নাটকগুলি আদর্শবান হতে হবে। আপনার এগুলি অপরিহার্য শৈলীতে ক্রমের ক্রম হিসাবে নয়, বরং পছন্দসই রাষ্ট্রের মতো, ঘোষণামূলক স্টাইল হিসাবে ভাবা উচিত। ফলস্বরূপ আপনি একাধিকবার এটি চালাতে সক্ষম হবেন এবং একই ফলস্বরূপ, একই সার্ভারের স্থিতি পান।

এটি সমস্ত দুর্দান্ত শোনাচ্ছে তবে কিছু স্নিগ্ধতা রয়েছে। এর মধ্যে একটি হ'ল ব্যবহারকারীদের পরিচালনা করছেন। "কাঙ্ক্ষিত রাষ্ট্র" এর অর্থ হ'ল প্রতিবার আপনি এমন একটি নাটক চালান যা ব্যবহারকারী তৈরি করে তাকে ঠিক সেই অবস্থাতেই মেলে আপডেট করা হবে। "আপডেট করা" দ্বারা আমি বোঝাতে চাইছি তার পাসওয়ার্ডটিও পরিবর্তন হয়ে যাবে। তবে সম্ভবত এটি আপনার যা প্রয়োজন তা নয়। সাধারণত, আপনাকে ব্যবহারকারী তৈরি করতে হবে, কেবল একবার তার পাসওয়ার্ড সেট এবং মেয়াদোত্তীর্ণ করা দরকার, আরও খেলার রানগুলি তার পাসওয়ার্ড আপডেট করা উচিত নয়।

ভাগ্যক্রমে, উত্তরযোগ্যটির মডিউলেupdate_password বৈশিষ্ট্য রয়েছে যা এই সমস্যাটি সমাধান করে। এটি নিবন্ধীকৃত ভেরিয়েবলের সাথে মিশ্রিত করা আপনি কেবল তখনই তার পাসওয়ার্ডটির মেয়াদ শেষ করতে পারবেন যখন ব্যবহারকারী আসলে আপডেট হয়।user

নোট করুন যে আপনি যদি ম্যানুয়ালি ব্যবহারকারীর শেল পরিবর্তন করেন (ধরুন, আপনি যে শেলটি অ্যাড অ্যাডমিন তার খেলায় চাপিয়েছেন) ব্যবহারকারী আপডেট হবে, সুতরাং তার পাসওয়ার্ডের মেয়াদ শেষ হয়ে যাবে।

এছাড়াও আপনি কীভাবে সহজে নাটকে সাধারণ পাঠ্য প্রাথমিক পাসওয়ার্ডগুলি ব্যবহার করতে পারেন তা নোট করুন। এগুলিকে অন্য কোথাও এনকোড করার দরকার নেই এবং হ্যাশগুলি পেস্ট করুন, আপনি তার জন্য জিনজা 2 ফিল্টার ব্যবহার করতে পারেন । তবে, আপনার প্রাথমিকভাবে কোনও কাজ করার আগে যদি কেউ লগইন করতে ঘটে তবে এটি একটি সুরক্ষা ত্রুটি হতে পারে।


3
আমার জন্য অন্য সমাধানটি কাজ করতে পারলাম না। তবুও আপনি উত্তর সহজ এবং কাজ। যদি আমি পারতাম তবে আপনাকে পাঁচটি প্রস্তাব দিতে চাই।
লিজেই

আমি চাই না যে আমার পাসওয়ার্ডটি এইভাবে হার্ড-কোডেড হোক :( উত্তর-খিলানটি থেকে এটিকে বের করে এখানে ইনজেক্ট করা কি সম্ভব? "{{ '{{vaulted_password}}' | password_hash('sha512') }}"
বাসা বাঁধা

আপনি চেষ্টা করেছেন {{ vaulted_password | password_hash('sha512') }}, vaulted_passwordভল্টের মানটির মূল চাবিকাঠিটি কোথায় ?
ম্যাডহেড

update_password: on_createকাজ করছে বলে মনে হচ্ছে না ( এটি 2017 সালের সম্পর্কে একটি মুক্ত ত্রুটি রয়েছে ), সুতরাং কোনও ব্যবহারকারীর রাষ্ট্র পরিবর্তন হওয়ার সাথে সাথে যে কোনও সময় পাসওয়ার্ড পরিবর্তন হবে ।
দিতি

11

Ansible 'ব্যবহারকারী' মডিউলে, ব্যবহারকারীরা পরিচালনা idempotent উপায়। প্রথম টাস্কের নীচে প্লেবুকটিতে ব্যবহারকারীর জন্য উপস্থিত = অবস্থা ঘোষণা করে । নোট করুন যে প্রথম কর্মে ' নিবন্ধক: নতুন ব্যবহারকারীর' দ্বিতীয় ক্রিয়াকে ব্যবহারকারী নতুন (newuser.changed == সত্য) বা বিদ্যমান ( newuser.changed==False) কেবল একবার পাসওয়ার্ড তৈরি করতে সহায়তা করে তা নির্ধারণ করতে সহায়তা করে ।

উত্তরীয় প্লেবুকটিতে রয়েছে:

tasks:
  - name: create deployment user
    user: 
      name: deployer 
      createhome: yes 
      state: present 
    register: newuser

  - name: generate random password for user only on creation
    shell: /usr/bin/openssl rand -base64 32 | passwd --stdin deployer
    when: newuser.changed

ভল্টের পাসওয়ার্ড সহ কেবলমাত্র একটি সমাধান আমার পক্ষে কাজ করছে। আপনাকে অনেক ধন্যবাদ.
ডেনিস সাভেনকো

কমপক্ষে সাম্প্রতিক ডেবিয়ান ভিত্তিক বিতরণগুলি পাসউইড বাইনারিতে দীর্ঘ जीএনইউ বিকল্প "--stdin" সমর্থন করে না বলে মনে হয়।
XXL

10

এই মত চেষ্টা করুন

vars_prompt:
 - name: "user_password"    
   prompt: "Enter a password for the user"    
   private: yes    
   encrypt: "md5_crypt" #need to have python-passlib installed in local machine before we can use it    
   confirm: yes    
   salt_size: 7

 - name: "add new user" user: name="{{user_name}}" comment="{{description_user}}" password="{{user_password}}" home="{{home_dir}}" shell="/bin/bash"

2
স্ক্রিপ্টটি চললে এটি কোনও পাসওয়ার্ড টাইপ করতে দেয় বলে এই সমাধানটি আমার পছন্দ হয়। বুটস্ট্র্যাপ স্ক্রিপ্টের জন্য দুর্দান্ত সমাধান যা প্রতিবার চালানো উচিত নয়। যদিও উবুন্টুর জন্য আমি "sha512_crypt" ব্যবহার করেছি।
গুন্নার

6

এই উত্তরের ভূমিকার উদ্দেশ্যটি হল new_user_name এর জন্য এলোমেলো পাসওয়ার্ড তৈরি করা এবং সাথে সাথে পাসওয়ার্ডটির মেয়াদ শেষ করা। নতুন_উজার_নামটির তার প্রথম লগনে পাসওয়ার্ড পরিবর্তন করতে হবে।

create_user.yml:

---
# create_user playbook

- hosts: your_host_group
  become: True
  user: ansible

  roles:
    - create_user

ভূমিকা / create_user / কর্ম / main.yml:

---
# Generate random password for new_user_name and the new_user_name
# is required to change his/her password on first logon. 

- name: Generate password for new user
  shell: makepasswd --chars=20
  register: user_password

- name: Generate encrypted password
  shell: mkpasswd --method=SHA-512 {{ user_password.stdout }}
  register: encrypted_user_password

- name: Create user account
  user: name={{ new_user_name }}
        password={{ encrypted_user_password.stdout }}
        state=present
        append=yes
        shell="/bin/bash"
        update_password=always
  when: new_user_name is defined and new_user_name in uids
  register: user_created

- name: Force user to change password
  shell: chage -d 0 {{ new_user_name }}
  when: user_created.changed

- name: User created
  debug: msg="Password for {{ new_user_name }} is {{ user_password.stdout }}"
  when: user_created.changed

আপনি যখন নতুন ব্যবহারকারী তৈরি করতে চান:

ansible-playbook -i hosts.ini create_user.yml --extra-vars "new_user_name=kelvin"

3

এটি সহজ উপায়:

---
- name: Create user
  user: name=user shell=/bin/bash home=/srv/user groups=admin,sudo generate_ssh_key=yes ssh_key_bits=2048
- name: Set password to user
  shell: echo user:plain_text_password | sudo chpasswd
  no_log: True

শেল: সর্বদা পরিবর্তনের প্রতিবেদন করার কারণ হবে।
bbaassssiiee

@ ডেটাসমিড আপনি নো-লোগল যোগ করতে পারবেন: সত্য বিকল্প ডকসস.স্যাবসিল :: অ্যান্সিবল /
ফিল প্যাফোর্ড

3

এটি আমার পক্ষে এভাবে কাজ করেছিল

- hosts: main
  vars:
  # created with:
  #  python -c "from passlib.hash import sha512_crypt; print sha512_crypt.encrypt('<password>')"
  # above command requires the PassLib library: sudo pip install passlib
  - password: '$6$rounds=100000$H/83rErWaObIruDw$DEX.DgAuZuuF.wOyCjGHnVqIetVt3qRDnTUvLJHBFKdYr29uVYbfXJeHg.IacaEQ08WaHo9xCsJQgfgZjqGZI0'

tasks:

- user: name=spree password={{password}} groups=sudo,www-data shell=/bin/bash append=yes
  sudo: yes

3

কেবল সম্পূর্ণতার জন্য আমি অ্যাডহক কমান্ডটি জবাবদিহি করে পোস্ট করব কারণ সেখানে একটি ক্যাচও রয়েছে।

প্রথমে বেশিরভাগ লিনাক্স সিস্টেমে উপলব্ধ mkpasswd ইউটিলিটি ব্যবহার করে একটি এনক্রিপ্ট করা পাসওয়ার্ড তৈরি করার চেষ্টা করুন:

mkpasswd --method=SHA-512

তারপরে উত্তরযোগ্য অ্যাড-হক আদেশটি চেষ্টা করুন:

ansible all -m user -a 'name=testuser shell=/bin/bash \
     comment="Test User" password=$6$XXXX' -k -u admin --sudo

তবে নিশ্চিত করুন:

  1. কমান্ডটি একক উদ্ধৃতিতে রয়েছে এবং দ্বিগুণ নয় অন্যথায় আপনার পাসওয়ার্ডটি কখনও কাজ করবে না
  2. আপনি এটি দিয়ে চালিত হন --sudoবা আপনি ( useradd: cannot lock /etc/passwd; try again later) এর মতো একটি ত্রুটি শেষ করেন



2

উপরে থেকে কয়েকটি সমাধানের সংমিশ্রণে, আমি একটি প্লেবুক তৈরি করেছি যা একটি এনক্রিপ্ট করা, স্থানীয় উত্তরযোগ্য ভল্ট ফাইলে সংরক্ষিত প্লেইন্টেক্সট পাসওয়ার্ডের ভিত্তিতে স্বয়ংক্রিয়ভাবে সঠিক পাসওয়ার্ড হ্যাশগুলি উত্পন্ন করে:

---
- hosts: [your hosts]
  tasks:
  - include_vars: [path to your encrypted vault file]
  - local_action: "command openssl passwd -salt '{{password_salt}}' -1 '{{password}}'"
    register: password_hash
  - user: >
        name=[your username]
        state=present
        password="{{password_hash.stdout}}"

আপনার ভল্ট ফাইলটি ডিক্রিপ্ট করার জন্য "--ask-vault-pass" বিকল্পটি ব্যবহার করে এই কমান্ডটি চালান (কোনও এনক্রিপ্ট করা ভল্ট কীভাবে পরিচালনা করবেন তথ্যের জন্য উত্তরযোগ্য-ভল্ট দেখুন)।


2

কিভাবে পাশ করার জন্য এনক্রিপ্ট পাসওয়ার্ড তৈরি করতে passwordAnsible করার Var user(@Brendan কাঠ এর মন্তব্য থেকে) টাস্ক:

openssl passwd -salt 'some_plain_salt' -1 'some_plain_pass'

ফলাফলটি দেখতে পাবেন:

$1$some_pla$lmVKJwdV3Baf.o.F0OOy71

userকাজের উদাহরণ :

- name: Create user
  user: name="my_user" password="$1$some_pla$lmVKJwdV3Baf.o.F0OOy71"

ইউপিডি: এসএএএএ -512 ব্যবহার করে ক্রিপ্ট এখানে এবং এখানে দেখুন :

পাইথন

$ python -c "import crypt, getpass, pwd; print crypt.crypt('password', '\$6\$saltsalt\$')"

$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/

পার্ল

$ perl -e 'print crypt("password","\$6\$saltsalt\$") . "\n"'

$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/

চুনি

$ ruby -e 'puts "password".crypt("$6$saltsalt$")'

$6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/

1
এটি কি এমডি 5 হ্যাশ পাসওয়ার্ড তৈরি করছে না? এটা কি অনিরাপদ নয়?
চিহ্নিত করুন

2

আপনি প্লেবুকগুলিতে গোপন কীগুলি ব্যবহারের জন্য উত্তর-ভল্ট ব্যবহার করতে পারেন। YML এ আপনার পাসওয়ার্ড সংজ্ঞায়িত করুন।

প্রাক্তন। পাস: গোপন বা

user:
  pass: secret
  name: fake

এর সাথে আপনার গোপনীয় ফাইলটি এনক্রিপ্ট করুন:

ansible-vault encrypt /path/to/credential.yml

জবাবদিহি এটি এনক্রিপ্ট করার জন্য একটি পাসওয়ার্ড জিজ্ঞাসা করবে। (আমি কীভাবে সেই পাসটি ব্যবহার করব তা ব্যাখ্যা করব)

এবং তারপরে আপনি যেখানে চান আপনার ভেরিয়েবলগুলি ব্যবহার করতে পারেন। ওয়াল্ট-কী ছাড়া কেউ এগুলি পড়তে পারে না।

ভল্ট কী ব্যবহার:

প্লেবুক চালানোর সময় আর্গুমেন্টের মাধ্যমে।

--ask-vault-pass: secret

অথবা আপনি password.txt এর মতো ফাইলে সংরক্ষণ করতে এবং কোথাও লুকিয়ে রাখতে পারেন। (সিআই ব্যবহারকারীদের জন্য দরকারী)

--vault-password-file=/path/to/file.txt

আপনার ক্ষেত্রে: vars yML অন্তর্ভুক্ত করুন এবং আপনার ভেরিয়েবলগুলি ব্যবহার করুন।

- include_vars: /path/credential.yml

  - name: Add deployment user
    action: user name={{user.name}} password={{user.pass}}

আমি ঠিক এটি চেষ্টা করেছি, এবং এটি কার্যকর হয় না। আমি বিশ্বাস করি, কারণ password={{user.pass}}প্রকৃত পাসওয়ার্ড অন্তর্ভুক্ত করার জন্য এটি প্রসারিত হবে, তবে উত্তরসূরি হ্যাশটির প্রত্যাশা করে।
টেকনিক

2

ব্যবহারকারীর জন্য এলোমেলো পাসওয়ার্ড তৈরি করা

প্রথমে ব্যবহারকারীদের পরিবর্তনশীল নির্ধারণ করতে হবে তারপরে নীচে অনুসরণ করুন

কাজ:

- name: Generate Passwords
  become: no
  local_action: command pwgen -N 1 8
  with_items: '{{ users }}'
  register: user_passwords

- name: Update User Passwords
  user:
    name: '{{ item.item }}'
    password: "{{ item.stdout | password_hash('sha512')}}"
    update_password: on_create
  with_items: '{{ user_passwords.results }}'

- name: Save Passwords Locally
  become: no
  local_action: copy content={{ item.stdout }} dest=./{{ item.item }}.txt
  with_items: '{{ user_passwords.results }}'

1

এমএক্সএক্সের উত্তরটি সঠিক তবে crypt.crypt()বিভিন্ন অপারেটিং সিস্টেমগুলি জড়িত থাকাকালীন আপনার অজগর পদ্ধতিটি নিরাপদ নয় (আপনার সিস্টেমে ব্যবহৃত গ্লাবসি হ্যাশ অ্যালগরিদমের সাথে সম্পর্কিত))

উদাহরণস্বরূপ, যদি আপনি ম্যাকওএস থেকে আপনার হ্যাশ তৈরি করে এবং লিনাক্সে কোনও প্লেবুক চালান তবে এটি কাজ করবে না। এই জাতীয় ক্ষেত্রে, আপনি পাসলিব ( pip install passlibস্থানীয়ভাবে ইনস্টল করতে) ব্যবহার করতে পারেন ।

from passlib.hash import md5_crypt
python -c 'import crypt; print md5_crypt.encrypt("This is my Password,salt="SomeSalt")'
'$1$SomeSalt$UqddPX3r4kH3UL5jq5/ZI.'

1

সমাধানগুলির কোনওটিই আমার ম্যাকের সাথে উবুন্টুকে নিয়ন্ত্রণ করতে সরাসরি কাজ করেনি। সুতরাং অন্যের স্বার্থে, এমএক্সএক্স এবং জয়েলবি উত্তরগুলির সংমিশ্রণে, এখানে পাইথন 3 এর বর্তমান সমাধান:

pip3 install passlib

python3 -c 'from passlib.hash import md5_crypt; \
      print(md5_crypt.encrypt("This is my Password", salt="SomeSalt"))'

$1$SomeSalt$UqddPX3r4kH3UL5jq5/ZI.এমএমএক্স'র উত্তরের মতো ফলাফল হবে ।

আরও ভাল , MD5 এর পরিবর্তে SHA512 ব্যবহার করুন:

python3 -c 'from passlib.hash import sha512_crypt; \
      print(sha512_crypt.encrypt("This is my Password", salt="SomeSalt"))' 

ফলাফল:

$ $ 6 চক্রের = 656000 $ SomeSalt $ oYpmnpZahIsvn5FK8g4bDFEAmGpEN114Fe6Ko4HvinzFaz5Rq2UXQxoJZ9ZQyQoi9zaBo3gBH / FEAov3FHv48


1

আমি একটি উত্তরযোগ্য-প্লেবুক তৈরি করেছি যা আপনাকে একটি লিনাক্স অ্যাকাউন্ট তৈরি করতে দেয় যা পাসওয়ার্ড প্রমাণীকরণের অনুমতি দেয়।

ক্রেডিটলিনাক্স অ্যাকাউন্টাউন্ট উইথ অ্যাসেসিবল দেখুন ।

হ্যাশ পাসওয়ার্ড mkpasswdকমান্ড ব্যবহার করে তৈরি করা হয়। আমি mkpasswdবিভিন্ন অপারেটিং সিস্টেমে ইনস্টল করার উপায়গুলি সরবরাহ করেছি ।

আমার স্ক্রিপ্টটি ব্যবহারের জন্য প্রয়োজনীয় পদক্ষেপগুলি এখানে:

  1. আপনার পছন্দসই ব্যবহারকারীর নাম এবং পাসওয়ার্ড দিয়ে প্রতিস্থাপন করুন <your_user_name>এবং <your_password>ভিতরে insiderun.sh

  2. সংযোগের তথ্যটি inventoryএমনভাবে পরিবর্তন করুন যাতে উত্তরযোগ্য কোনও ব্যবহারকারী তৈরি করতে মেশিনের সাথে সংযোগ করতে পারে।

  3. ./run.shস্ক্রিপ্টটি কার্যকর করতে চালান ।


1
ফাইলটি আর গিটহাবে নেই।
জানুস

0

আপনি যদি কোনও উত্তরযোগ্য অ্যাডহক কমান্ড হিসাবে এটি সম্পাদন করতে চান তবে নিম্নলিখিতগুলি করতে পারেন:

$ password='SomethingSecret!'
$ ansible 192.168.1.10 -i some_inventory -b -m user -a "name=joe_user \
       update_password=always password=\"{{ \"$password\" | password_hash('sha512') }}\""

উপরের কমান্ড থেকে আউটপুট:

192.168.1.10 | SUCCESS => {
    "append": false,
    "changed": true,
    "comment": "Joe User",
    "group": 999,
    "home": "/home/joe_user",
    "move_home": false,
    "name": "joe_user",
    "password": "NOT_LOGGING_PASSWORD",
    "shell": "/bin/bash",
    "state": "present",
    "uid": 999
}

0

আমি জানি যে আমি পার্টিতে দেরি করেছি, তবে আরও একটি সমাধান রয়েছে যা আমি ব্যবহার করছি। এটি --stdinপাসওয়ার্ড বাইনারি না থাকা ডিস্ট্রোদের পক্ষে কার্যকর হতে পারে ।

- hosts: localhost
  become: True
  tasks:
    - name: Change user password
      shell: "yes '{{ item.pass }}' | passwd {{ item.user }}"
      loop:
       - { pass: 123123, user: foo }
       - { pass: asdf, user: bar }
      loop_control:
        label: "{{ item.user }}"

লেবেল কেবলমাত্র ব্যবহারকারীর নাম loop_controlমুদ্রণের জন্য দায়বদ্ধ । পুরো প্লেবুক বা কেবল ব্যবহারকারীর ভেরিয়েবলগুলি (আপনি ব্যবহার করতে পারেন ) উত্তরযোগ্য-ভল্টের সাহায্যে এনক্রিপ্ট করা উচিত।vars_files:


0

আমার সমাধানটি লুক্কিট ব্যবহার করে এবং স্বয়ংক্রিয়ভাবে পাসওয়ার্ড তৈরি করে।

---
- hosts: 'all'
  remote_user: root
  gather_facts: no
  vars:
    deploy_user: deploy
    deploy_password: "{{ lookup('password', '/tmp/password chars=ascii_letters') }}"

  tasks:
    - name: Create deploy user
      user:
        name: "{{ deploy_user }}"
        password: "{{ deploy_password | password_hash('sha512') }}"

0

এমকেপাসউইডড, পাইথন ইত্যাদি সহ অনেকগুলি ইউটিলিটি চেষ্টা করে দেখেছেন তবে মনে হচ্ছে অন্যান্য সরঞ্জাম দ্বারা উত্পাদিত HASH মানগুলি পড়ার ক্ষেত্রে উত্তর সহ কিছু সামঞ্জস্যতার সমস্যা রয়েছে। সুতরাং অবশেষে এটি নিজে উত্তর দিয়ে উত্তর দিয়ে কাজ করেছে।

উত্তরযোগ্য অল-আই লোকালহোস্ট, -m ডিবাগ -a "msg = = your 'yourpasswd' | পাসওয়ার্ড_হ্যাশ ('sha512', 'মাইক্রিসেটসাল্ট')}}"

প্লেবুক -

- name: User creation
  user: 
    name: username  
    uid: UID
    group: grpname
    shell: /bin/bash
    comment: "test user"
    password: "$6$mysecretsalt$1SMjoVXjYf.3sJR3a1WUxlDCmdJwC613.SUD4DOf40ASDFASJHASDFCDDDWERWEYbs8G00NHmOg29E0"

-1

ওয়েল আমি পার্টিতে পুরোপুরি দেরি করেছি :) আমার উত্তরীয় খেলার প্রয়োজন ছিল যা এলোমেলো পাসওয়ার্ড সহ একাধিক স্থানীয় ব্যবহারকারী তৈরি করে। এটিই আমি নিয়ে এসেছি, শীর্ষ থেকে কয়েকটি উদাহরণ ব্যবহার করেছি এবং এগুলিকে কিছু পরিবর্তন সহ একত্রিত করেছি।

তৈরি ব্যবহারকারী-সঙ্গে-password.yml

---
# create_user playbook

- hosts: all
  become: True
  user: root
  vars:
#Create following user
   users:
    - test24
    - test25
#with group
   group: wheel
  roles:
    - create-user-with-password

/roles/create-user-with-password/tasks/main.yml

- name: Generate password for new user
  local_action: shell pwgen -s -N 1 20
  register: user_password
  with_items: "{{ users }}"
  run_once: true

- name: Generate encrypted password
  local_action: shell python -c 'import crypt; print(crypt.crypt( "{{ item.stdout }}", crypt.mksalt(crypt.METHOD_SHA512)))'
  register: encrypted_user_password
  with_items: "{{ user_password.results }}"
  run_once: true

- name: Create new user with group
  user:
    name: "{{ item }}"
    groups: "{{ group }}"
    shell: /bin/bash
    append: yes
    createhome: yes
    comment: 'Created with ansible'
  with_items:
    - "{{ users }}"
  register: user_created

- name: Update user Passwords
  user:
    name: '{{ item.0 }}'
    password: '{{ item.1.stdout }}'
  with_together:
    - "{{ users }}"
    - "{{ encrypted_user_password.results }}"
  when: user_created.changed

- name: Force user to change the password at first login
  shell: chage -d 0 "{{ item }}"
  with_items:
    - "{{ users }}"
  when: user_created.changed

- name: Save Passwords Locally
  become: no
  local_action: copy content={{ item.stdout }} dest=./{{ item.item }}.txt
  with_items: "{{ user_password.results }}"
  when: user_created.changed
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.