Creating a new user and password with Ansible

后端 未结 22 1396
迷失自我
迷失自我 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:38

    You can use ansible-vault for using secret keys in playbooks. Define your password in yml.

    ex. pass: secret or

    user:
      pass: secret
      name: fake
    

    encrypt your secrets file with :

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

    ansible will ask a password for encrypt it. (i will explain how to use that pass)

    And then you can use your variables where you want. No one can read them without vault-key.

    Vault key usage:

    via passing argument when running playbook.

    --ask-vault-pass: secret
    

    or you can save into file like password.txt and hide somewhere. (useful for CI users)

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

    In your case : include vars yml and use your variables.

    - include_vars: /path/credential.yml
    
      - name: Add deployment user
        action: user name={{user.name}} password={{user.pass}}
    
    0 讨论(0)
  • 2020-12-22 17:39

    This is how it worked for me

    - 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
    
    0 讨论(0)
  • 2020-12-22 17:39

    My solution is using lookup and generate password automatically.

    ---
    - 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 讨论(0)
  • 2020-12-22 17:39

    Mxx's answer is correct but you the python crypt.crypt() method is not safe when different operating systems are involved (related to glibc hash algorithm used on your system.)

    For example, It won't work if your generate your hash from MacOS and run a playbook on linux. In such case , You can use passlib (pip install passlib to install locally).

    from passlib.hash import md5_crypt
    python -c 'import crypt; print md5_crypt.encrypt("This is my Password,salt="SomeSalt")'
    '$1$SomeSalt$UqddPX3r4kH3UL5jq5/ZI.'
    
    0 讨论(0)
  • 2020-12-22 17:40

    I may be too late to reply this but recently I figured out that jinja2 filters have the capability to handle the generation of encrypted passwords. In my main.yml I'm generating the encrypted password as:

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

    "uusername " and "upassword " are passed as --extra-vars to the playbook and notice I have used jinja2 filter here to encrypt the passed password.

    I have added below tutorial related to this to my blog

    • https://thinkingmonster.wordpress.com/it-automation/386-2/ansible-roles/
    0 讨论(0)
  • 2020-12-22 17:40

    The task definition for the user module should be different in the latest Ansible version.

    tasks:
      - user: name=test password={{ password }} state=present
    
    0 讨论(0)
提交回复
热议问题