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?

1voto

Brian Points 2457

J'ai créé un ansible-playbook qui vous permet de créer un compte Linux autorisant l'authentification par mot de passe.

Voir AnsibleLinuxAccountCreator.

Le mot de passe haché est généré en utilisant la commande mkpasswd. J'ai fourni les méthodes pour installer mkpasswd sur différents systèmes d'exploitation.

Voici les étapes nécessaires pour utiliser mon script :

  1. Remplacez et à l'intérieur de run.sh par votre nom d'utilisateur et mot de passe souhaités.

  2. Modifiez les informations de connexion dans inventory afin qu'Ansible puisse se connecter à la machine pour créer un utilisateur.

  3. Exécutez ./run.sh pour exécuter le script.

0voto

Alex Baranowski Points 410

Je sais que je suis en retard à la fête, mais il y a une autre solution que j'utilise. Cela peut être pratique pour les distributions qui n'ont pas de --stdin dans le binaire passwd.

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

Le libellé dans loop_control est responsable de l'impression uniquement du nom d'utilisateur. L'ensemble du playbook ou uniquement les variables utilisateur (vous pouvez utiliser vars_files:) doivent être chiffrés avec ansible-vault.

0voto

Charm000 Points 81

Je n'ai pas pu obtenir de réponses ici qui fonctionnaient avec des variables chiffrées. Donc, pour ceux qui utilisent des mots de passe "chiffrés" et qui rencontrent cette erreur :

"msg": "Erreur inattendue de type de modélisation sur ({{ trucs de modèle Jinja }}) : objet de type chaîne ou octets attendu"

Vous devez utiliser le filtre '|' pour passer la variable chiffrée par le coffre fort à travers "string" pour que cela fonctionne.

- name: Création de l'utilisateur "{{ uusername }}" avec un accès administrateur
  user: 
    name: {{ uusername }}
    password: "{{ upassword | string | password_hash('sha512', (upassword_salt | string)) }}"
    groups: admin append=yes
  when:  assigned_role  == "oui"

Basé sur la solution Ansible pour l'issue GitHub issue #24425

En s'inspirant du code d'une réponse de thinkingmonster et du commentaire de michael-aicher.

0voto

nikhil Points 111
- nom: Créer un utilisateur
  hôtes: tous
  devenir: vrai
  tâches:

- nom: "Créer des utilisateurs et définir le mot de passe"    
  utilisateur:
    nom: 
    update_password: toujours
    mot_de_passe: password_hash('sha512')
    groupes: sudo

-1voto

Juhani Points 1

Je suis complètement en retard pour la fête :) J'avais besoin d'un playbook ansible qui crée plusieurs utilisateurs locaux avec des mots de passe aléatoires. Voici ce que j'ai trouvé, j'ai utilisé certains exemples du haut et je les ai regroupés avec quelques changements.

create-user-with-password.yml

---
# create_user playbook

- hosts: all
  become: True
  user: root
  vars:
#Créer les utilisateurs suivants
   users:
    - test24
    - test25
#groupe
   group: wheel
  roles:
    - create-user-with-password

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

- name: Générer un mot de passe pour le nouvel utilisateur
  local_action: shell pwgen -s -N 1 20
  register: user_password
  with_items: "{{ users }}"
  run_once: true

- name: Générer un mot de passe crypté
  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: Créer un nouvel utilisateur avec le groupe
  user:
    name: "{{ item }}"
    groups: "{{ group }}"
    shell: /bin/bash
    append: yes
    createhome: yes
    comment: 'Créé avec ansible'
  with_items:
    - "{{ users }}"
  register: user_created

- name: Mettre à jour les mots de passe des utilisateurs
  user:
    name: '{{ item.0 }}'
    password: '{{ item.1.stdout }}'
  with_together:
    - "{{ users }}"
    - "{{ encrypted_user_password.results }}"
  when: user_created.changed

- name: Forcer l'utilisateur à changer de mot de passe lors de la première connexion
  shell: chage -d 0 "{{ item }}"
  with_items:
    - "{{ users }}"
  when: user_created.changed

- name: Enregistrer les mots de passe localement
  become: no
  local_action: copy content={{ item.stdout }} dest=./{{ item.item }}.txt
  with_items: "{{ user_password.results }}"
  when: user_created.changed

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