Ansible est une solution dâautomatisation de choix pour les administrateurs systĂšme qui souhaitent gĂ©rer efficacement les configurations et dĂ©ployer des tĂąches rĂ©pĂ©titives. đ Cet article vous guide pas Ă pas sur l’utilisation d’Ansible pour gĂ©rer les utilisateurs et lâauthentification sur des serveurs distants. Nous allons travailler avec deux serveurs, servera et serverb, en automatisant le processus d’ajout d’utilisateurs et la gestion des clĂ©s SSH. đ
Résultats attendus : Ce que vous allez apprendre
Ă la fin de ce guide, vous serez capable de :
- Créer et gérer des utilisateurs localement sur vos hÎtes.
- Déployer des clés SSH autorisées pour chaque utilisateur.
- Configurer les droits sudo sans mot de passe pour un groupe spécifique.
- DĂ©sactiver l’accĂšs SSH root (parce que la sĂ©curitĂ©, c’est important !).
Ăa vous intrigue ? Parfait, c’est parti !
Scénario : Unifier les utilisateurs et les accÚs sur tous vos serveurs
Imaginez que votre organisation vous confie une mission cruciale : vous devez vous assurer que tous les hĂŽtes disposent des mĂȘmes utilisateurs locaux. Ces utilisateurs doivent :
- Faire partie du groupe
webadmin, capable d’utiliser la commandesudosans mot de passe. - Avoir leurs clĂ©s publiques SSH dĂ©ployĂ©es pour une connexion sĂ©curisĂ©e.
- EmpĂȘcher l’utilisateur root de se connecter directement via SSH (une bonne pratique de sĂ©curitĂ© !).
Et bien sĂ»r, tout cela doit ĂȘtre automatisĂ©. C’est lĂ qu’Ansible entre en jeu avec son playbook magique.
âïž Ătape 1 : PrĂ©parer l’environnement
Avant de plonger dans Ansible, assurez-vous que votre environnement est bien préparé.
1.1. đ„ïž Installer Ansible
Sur votre machine de contrÎle (ici appelée workstation), vous devez installer Ansible. Si vous utilisez un systÚme basé sur Debian/Ubuntu, exécutez les commandes suivantes :
$ sudo apt-get update
$ sudo apt-get install ansibleVĂ©rifiez que lâinstallation a rĂ©ussi en consultant la version installĂ©e dâAnsible :
$ ansible --version1.2. đ GĂ©nĂ©rer et copier les clĂ©s SSH
Pour permettre à Ansible de se connecter à vos serveurs sans avoir à saisir de mot de passe, vous devez configurer une authentification par clé SSH.
Générer une paire de clés SSH sur la workstation :
$ ssh-keygen -t rsa -b 4096Vous pouvez simplement appuyer sur Entrée pour accepter les valeurs par défaut, sauf si vous souhaitez spécifier un chemin pour la clé.
Copier la clé publique sur les serveurs servera et serverb :
$ ssh-copy-id user@servera
$ ssh-copy-id user@serverbCette commande permet de copier la clĂ© publique dans le fichier ~/.ssh/authorized_keys sur chaque serveur distant. â
1.3. đ Tester la connexion SSH
Avant de continuer, assurez-vous que la connexion SSH fonctionne correctement sans mot de passe en exécutant :
$ ssh user@servera
$ ssh user@serverbSi vous pouvez vous connecter sans mot de passe, c’est que tout est en ordre. đ
Pour la suite du tutoriel, vous pouvez rĂ©cupĂ©rer le projet complet sur mon dĂ©pĂŽt git. Cela vous permettra de suivre les Ă©tapes plus facilement et d’exĂ©cuter directement les playbooks et fichiers de configuration fournis. modifiez les fichiers afin de l’adapter a votre environnement https://github.com/DJTJ21/System-users.git
Ătape 1 : CrĂ©er un groupe dâutilisateurs et gĂ©rer les utilisateurs
Ansible dispose dâun module spĂ©cialement conçu pour gĂ©rer les utilisateurs locaux : le module user. Mais avant de crĂ©er les utilisateurs, nous devons d’abord nous assurer que le groupe webadmin (vous pouvez le changer en fonction du groupe que vous souhaitez creer ) existe sur tous les serveurs cibles.
- name: Add webadmin group
group:
name: webadmin
state: presentEnsuite, nous crĂ©ons plusieurs utilisateurs qui appartiennent Ă ce groupe. Pour cela, nous allons lire un fichier de variables vars/users_vars.yml oĂč nous avons dĂ©fini nos utilisateurs comme suit :
users:
- username: user1
groups: webadmin
- username: user2
groups: webadmin
- username: user3
groups: webadminVoici la tĂąche Ansible correspondante :
- name: Create user accounts
user:
name: "{{ item.username }}"
groups: "{{ item.groups }}"
loop: "{{ users }}"Simple, non ? Ansible parcourt la liste des utilisateurs dans le fichier et les crée automatiquement sur les serveurs cibles.
Ătape 2 : DĂ©ployer les clĂ©s SSH
SĂ©curiser l’accĂšs SSH est une prioritĂ©. GrĂące au module authorized_key, nous allons distribuer les clĂ©s publiques SSH Ă chaque utilisateur. Dans le rĂ©pertoire files, nous avons un fichier de clĂ© unique pour chaque utilisateur. Voici comment Ansible va sâassurer que chaque utilisateur a sa clĂ© SSH autorisĂ©e :
- name: Add authorized keys
authorized_key:
user: "{{ item.username }}"
key: "{{ lookup('file', 'files/'+ item.username + '.key.pub') }}"
loop: "{{ users }}"Avec cette tùche, chaque utilisateur pourra se connecter en toute sécurité via SSH, sans avoir à entrer de mot de passe.
Ătape 3 : Configurer les droits sudo
L’objectif est que les utilisateurs du groupe webadmin puissent exĂ©cuter des commandes avec sudo sans avoir Ă saisir de mot de passe. Nous allons donc ajouter une rĂšgle dans le fichier sudoers :
- name: Modify sudo config to allow webadmin users sudo without a password
copy:
content: "%webadmin ALL=(ALL) NOPASSWD: ALL"
dest: /etc/sudoers.d/webadmin
mode: 0440Et voilĂ , plus besoin de mot de passe pour ces utilisateurs lorsqu’ils utilisent sudo !
Ătape 4 : DĂ©sactiver l’accĂšs root via SSH
L’accĂšs root direct via SSH est un risque pour la sĂ©curitĂ©. Nous allons modifier le fichier sshd_config pour interdire cette pratique. Ansible sâen charge via le module lineinfile :
- name: Disable root login via SSH
lineinfile:
dest: /etc/ssh/sshd_config
regexp: "^PermitRootLogin"
line: "PermitRootLogin no"
notify: Restart sshdUn gestionnaire est déclenché pour redémarrer le service SSH aprÚs cette modification :
handlers:
- name: Restart sshd
service:
name: sshd
state: restartedLe playbook complet se présente maintenant comme suit :
---
- name: Create multiple local users
hosts: webservers
vars_files:
- vars/users_vars.yml
handlers:
- name: Restart sshd
service:
name: sshd
state: restarted
tasks:
- name: Add webadmin group
group:
name: webadmin
state: present
- name: Create user accounts
user:
name: "{{ item.username }}"
groups: "{{ item.groups }}"
loop: "{{ users }}"
- name: Add authorized keys
authorized_key:
user: "{{ item.username }}"
key: "{{ lookup('file', 'files/'+ item.username + '.key.pub') }}"
loop: "{{ users }}"
- name: Modify sudo config to allow webadmin users sudo without a password
copy:
content: "%webadmin ALL=(ALL) NOPASSWD: ALL"
dest: /etc/sudoers.d/webadmin
mode: 0440
- name: Disable root login via SSH
lineinfile:
dest: /etc/ssh/sshd_config
regexp: "^PermitRootLogin"
line: "PermitRootLogin no"
notify: "Restart sshd"Ătape 5 : ExĂ©cuter le playbook
Une fois toutes ces tùches écrites, il est temps de tester notre playbook. Depuis le répertoire de travail, exécutez la commande suivante :

đ Si tout s’est bien passĂ©, vous devriez voir la sortie ci-dessous. Et voilĂ ! Vos utilisateurs ont Ă©tĂ© créés et configurĂ©s avec succĂšs. C’est pas gĂ©nial ça ? đđ

đ€ Et si nos utilisateurs n’ont pas Ă©tĂ© créés ? Pas de panique ! Allons vĂ©rifier ça ensemble ! đđ

Bravo, vous avez rĂ©ussi ! đđȘ Vous avez non seulement automatisĂ© la gestion des utilisateurs, mais aussi sĂ©curisĂ© vos serveurs đâš.
Conclusion
Avec ce guide, vous avez maintenant une meilleure comprĂ©hension de la façon dont Ansible simplifie la gestion des utilisateurs et l’authentification dans un environnement multi-serveurs. đđ» Automatiser ces tĂąches avec Ansible non seulement vous fait gagner du temps âł, mais garantit aussi une cohĂ©rence et une sĂ©curitĂ© accrues đâ . Alors, prĂȘt Ă rendre votre infrastructure plus intelligente ? đ€.

