Creating a new user and password with Ansible

后端 未结 22 1398
迷失自我
迷失自我 2020-12-22 17:00

I have an ansible task which creates a new user on ubuntu 12.04;

- name: Add deployment user
    action: user name=deployer password=mypassword
相关标签:
22条回答
  • 2020-12-22 17:40

    I have created an ansible-playbook that allows you to create a linux account that allows password authentication.

    See CreateLinuxAccountWithAnsible.

    The hashed password is generated using mkpasswd command. I've provided the ways to install mkpasswd on different operating systems.

    Here are the steps required to use my script:

    1. Replace <your_user_name> and <your_password> inside run.sh with your desired user name and password.

    2. Change the connection information in inventory so that ansible can connect to the machine to create a user.

    3. Run ./run.sh to execute the script.

    0 讨论(0)
  • If you read Ansible's manual for user module, it'll direct you to the Ansible-examples github repo for details how to use password parameter.

    There you'll see that your password must be hashed.

    - 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}}
    

    If your playbook or ansible command line has your password as-is in plain text, this means your password hash recorded in your shadow file is wrong. That means when you try to authenticate with your password its hash will never match.

    Additionally, see Ansible FAQ regarding some nuances of password parameter and how to correctly use it.

    0 讨论(0)
  • 2020-12-22 17:44

    The purpose of the role in this answer is to generate random password for new_user_name and expire the password immediately. The new_user_name is required to change the password on his/her first logon.

    create_user.yml:

    ---
    # create_user playbook
    
    - hosts: your_host_group
      become: True
      user: ansible
    
      roles:
        - create_user
    

    roles/create_user/tasks/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
    

    When you want to create a new user:

    ansible-playbook -i hosts.ini create_user.yml --extra-vars "new_user_name=kelvin"
    
    0 讨论(0)
  • 2020-12-22 17:44

    If you'd like to accomplish this as a Ansible ad-hoc command you can do the following:

    $ 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') }}\""
    

    Output from above command:

    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 讨论(0)
提交回复
热议问题