# Rotation de mot de passe SSH/sudo Petit projet Ansible pour changer le mot de passe d'un compte Linux existant sur un ou plusieurs serveurs. Le playbook demande le nouveau mot de passe au lancement et l'applique sur les hotes cibles avec `chpasswd` via `sudo`. Le mot de passe n'est pas stocke dans les fichiers du depot et la tache de changement est masquee avec `no_log: true`. ## Fichiers principaux - `ansible.cfg` : configuration Ansible du projet. - `inventories/hosts.yml` : inventaire principal et variables de connexion. - `playbooks/change_password.yml` : playbook de changement de mot de passe. ## Configuration Les variables communes sont definies dans `inventories/hosts.yml`, sous `all.vars` : ```yaml all: vars: ansible_user: admin password_target_user: admin ``` - `ansible_user` est l'utilisateur SSH utilise pour se connecter aux serveurs. - `password_target_user` est le compte dont le mot de passe sera change. Gardez `password_target_user` identique a `ansible_user` lorsque le compte SSH et le compte sudo sont les memes. L'inventaire separe les serveurs en deux familles : ```yaml linux_servers: hosts: linux-server-01.example.com: linux-server-02.example.com: ansible_host: 192.0.2.10 ssh_key_servers: vars: ansible_ssh_private_key_file: ~/.ssh/id_ed25519 hosts: test-server.example.com: linux-server-01.example.com: ssh_password_servers: hosts: linux-server-02.example.com: ``` - `ssh_key_servers` regroupe les serveurs accessibles avec une cle SSH. Le chemin de la cle privee est factorise dans les variables du groupe. - `ssh_password_servers` regroupe les serveurs accessibles avec un mot de passe SSH. Utilisez `--ask-pass` pour ces hotes. - `linux_servers` reste le groupe de rollout principal. Un hote peut appartenir a la fois a `linux_servers` et a une famille d'authentification. Si un serveur avec cle SSH utilise une cle differente, placez l'exception sur l'entree de l'hote : ```yaml ssh_key_servers: vars: ansible_ssh_private_key_file: ~/.ssh/id_ed25519 hosts: special-server.example.com: ansible_ssh_private_key_file: ~/.ssh/special_server_key ``` ## Utilisation Lancez le playbook avec demande du mot de passe `sudo` : ```bash ansible-playbook playbooks/change_password.yml --ask-become-pass ``` Le playbook demandera ensuite le nouveau mot de passe du compte cible, avec confirmation. ## Deploiement progressif Commencez par un petit groupe de test : ```bash ansible-playbook playbooks/change_password.yml --ask-become-pass --limit test ``` Puis ciblez le groupe complet lorsque le test est valide : ```bash ansible-playbook playbooks/change_password.yml --ask-become-pass --limit linux_servers ``` Pour cibler seulement les serveurs avec cle SSH : ```bash ansible-playbook playbooks/change_password.yml --ask-become-pass --limit ssh_key_servers ``` Si la cle privee SSH est protegee par une passphrase, le playbook ne la demande pas directement. Cette passphrase est geree par OpenSSH. Le plus fiable est de charger la cle dans `ssh-agent` avant de lancer Ansible : ```bash ssh-add ~/.ssh/id_ed25519 ansible-playbook playbooks/change_password.yml --ask-become-pass --limit ssh_key_servers ``` Pour cibler les serveurs avec mot de passe SSH, ajoutez `--ask-pass` : ```bash ansible-playbook playbooks/change_password.yml --ask-pass --ask-become-pass --limit ssh_password_servers ``` ## Verification Verifier que l'inventaire est lisible : ```bash ansible-inventory --list ``` Verifier la syntaxe du playbook : ```bash ansible-playbook playbooks/change_password.yml --syntax-check ``` ## Regles de securite - Ne commitez jamais de mot de passe en clair. - Utilisez `vars_prompt`, `ansible-vault` ou une source externe pour les secrets. - Conservez `no_log: true` sur les taches qui manipulent un mot de passe ou un hash de mot de passe. - Testez toujours sur un groupe restreint avant de cibler tous les serveurs. - Ne modifiez pas la politique SSH pendant une rotation de mot de passe.