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?

3voto

pgaref Points 51

Juste pour être complet, je vais poster la commande ad-hoc en utilisant ansible car il y a aussi une astuce là-bas.

Essayez d'abord de générer un mot de passe crypté en utilisant l'utilitaire mkpasswd qui est disponible sur la plupart des systèmes Linux :

mkpasswd --method=SHA-512

Ensuite, essayez la commande ad-hoc ansible :

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

Mais assurez-vous :

  1. Que la commande est entre guillemets simples et PAS doubles sinon votre mot de passe ne fonctionnera jamais
  2. Que vous l'exécutez avec --sudo sinon vous obtenez une erreur comme (useradd: cannot lock /etc/passwd; try again later)

3voto

PMOKSUZ Points 1

Vous pouvez utiliser ansible-vault pour utiliser des clés secrètes dans les playbooks. Définissez votre mot de passe dans le fichier yml.

ex. pass: secret ou

user:
  pass: secret
  name: fake

Chiffrez votre fichier de secrets avec :

ansible-vault encrypt /chemin/vers/credential.yml

ansible demandera un mot de passe pour le chiffrer. (j'expliquerai comment utiliser ce mot de passe)

Ensuite, vous pouvez utiliser vos variables où vous voulez. Personne ne peut les lire sans la clé vault.

Utilisation de la clé Vault :

en passant en argument lors de l'exécution du playbook.

--ask-vault-pass: secret

ou vous pouvez enregistrer dans un fichier tel que password.txt et le cacher quelque part. (utile pour les utilisateurs CI)

--vault-password-file=/chemin/vers/fichier.txt

Dans votre cas : inclure les variables yml et utilisez vos variables.

- include_vars: /chemin/credential.yml

  - name: Ajouter un utilisateur de déploiement
    action: user name={{user.name}} password={{user.pass}}

3voto

Apuri Srikanth Points 181

Génération de mot de passe aléatoire pour l'utilisateur

commencez par définir la variable users puis suivez les étapes ci-dessous

tâches:

- name: Générer des mots de passe
  become: no
  local_action: command pwgen -N 1 8
  with_items: '{{ users }}'
  register: user_passwords

- name: Mettre à jour les mots de passe des utilisateurs
  user:
    name: '{{ item.item }}'
    password: "{{ item.stdout | password_hash('sha512')}}"
    update_password: on_create
  with_items: '{{ user_passwords.results }}'

- name: Sauvegarder les mots de passe localement
  become: no
  local_action: copy content={{ item.stdout }} dest=./{{ item.item }}.txt
  with_items: '{{ user_passwords.results }}'

2voto

Christian Berendt Points 538

La définition de la tâche pour le module utilisateur devrait être différente dans la dernière version d'Ansible.

tâches:
  - utilisateur : nom=test mot_de_passe={{ password }} état=présent

2voto

Dmitriy Points 1324

Comment créer un mot de passe crypté à passer à la variable password de la tâche user d'Ansible (basé sur le commentaire de @Brendan Wood) :

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

Le résultat ressemblera à ceci :

$1$some_pla$lmVKJwdV3Baf.o.F0OOy71

Exemple de tâche user :

- name: Créer un utilisateur
  user: name="mon_utilisateur" password="$1$some_pla$lmVKJwdV3Baf.o.F0OOy71"

MISE À JOUR : cryptage en utilisant SHA-512 voir ici et ici :

Python

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

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

Perl

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

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

Ruby

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

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

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