Files

4.0 KiB

🔐 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 :

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 :

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 :

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 :

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 :

ansible-playbook playbooks/change_password.yml --ask-become-pass --limit test

Puis ciblez le groupe complet lorsque le test est valide :

ansible-playbook playbooks/change_password.yml --ask-become-pass --limit linux_servers

Pour cibler seulement les serveurs avec cle SSH :

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 :

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 :

ansible-playbook playbooks/change_password.yml --ask-pass --ask-become-pass --limit ssh_password_servers

Verification

Verifier que l'inventaire est lisible :

ansible-inventory --list

Verifier la syntaxe du playbook :

ansible-playbook playbooks/change_password.yml --syntax-check

🛡️ Regles de securite

  • 🔒 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.