134 votes

Création d'un nouvel utilisateur et d'un mot de passe avec Ansible

J'ai une tâche ansible qui crée un nouvel utilisateur sur ubuntu 12.04;

- name: Ajouter un utilisateur de déploiement
    action: user name=deployer password=mypassword

il se termine comme prévu mais lorsque je me connecte en tant qu'utilisateur et essaie de faire sudo avec le mot de passe que j'ai défini, il dit toujours que c'est incorrect. Qu'est-ce que je fais de mal?

9voto

MCKelvin Points 693

Le but du rôle dans cette réponse est de générer un mot de passe aléatoire pour new_user_name et d'expirer immédiatement le mot de passe. Le new_user_name est requis pour changer le mot de passe lors de sa première connexion.

create_user.yml:

---
# playbook create_user

- hosts: your_host_group
  become: True
  user: ansible

  roles:
    - create_user

roles/create_user/tasks/main.yml:

---
# Générer un mot de passe aléatoire pour new_user_name et le new_user_name
# est requis pour changer son mot de passe lors de sa première connexion.

- name: Générer un mot de passe pour le nouvel utilisateur
  shell: makepasswd --chars=20
  register: user_password

- name: Générer un mot de passe crypté
  shell: mkpasswd --method=SHA-512 {{ user_password.stdout }}
  register: encrypted_user_password

- name: Créer un compte utilisateur
  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: Forcer l'utilisateur à changer de mot de passe
  shell: chage -d 0 {{ new_user_name }}
  when: user_created.changed

- name: Utilisateur créé
  debug: msg="Mot de passe pour {{ new_user_name }} est {{ user_password.stdout }}"
  when: user_created.changed

Lorsque vous souhaitez créer un nouvel utilisateur:

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

6voto

DjangoChained Points 61

J'ai essayé plusieurs utilitaires, y compris mkpasswd, Python, etc., mais il semble qu'il y ait un problème de compatibilité avec Ansible pour lire les valeurs de HASH générées par d'autres outils. Finalement, cela a fonctionné en utilisant la valeur Ansible elle-même.

ansible all -i localhost, -m debug -a "msg={{ 'votremotdepasse' | password_hash('sha512', 'monsecretsalt') }}"

Playbook:

- name: Création de l'utilisateur
  user: 
    name: nom_utilisateur  
    uid: UID
    group: nom_grp
    shell: /bin/bash
    comment: "utilisateur de test"
    password: "$6$monsecretsalt$1SMjoVXjYf.3sJR3a1WUxlDCmdJwC613.SUD4DOf40ASDFASJHASDFCDDDWERWEYbs8G00NHmOg29E0"

4voto

alex naumov Points 131

Ma solution consiste à utiliser la recherche et à générer automatiquement un mot de passe.

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

3voto

hecbuma Points 59

C'est ainsi que ça a fonctionné pour moi

- hosts: main
  vars:
  # créé avec:
  #  python -c "from passlib.hash import sha512_crypt; print sha512_crypt.encrypt('')"
  # la commande ci-dessus nécessite la bibliothèque PassLib : 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

3voto

Lightmed Points 31

C'est la manière simple :

---
- name: Créer un utilisateur
  user: name=user shell=/bin/bash home=/srv/user groups=admin,sudo generate_ssh_key=yes ssh_key_bits=2048
- name: Définir le mot de passe de l'utilisateur
  shell: echo user:plain_text_password | sudo chpasswd
  no_log: True

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X