--- - name: Installer openssh-server ansible.builtin.apt: name: openssh-server state: present - name: Créer le répertoire sshd_config.d ansible.builtin.file: path: /etc/ssh/sshd_config.d state: directory owner: root group: root mode: "0755" # UN RENOMMAGE DE ROLE LAISSE SON ANCIEN FICHIER EN VIGUEUR (2026-08-25). # # Ce role s'appelait `chezlepro` et deposait `10-chezlepro.conf`. Renomme en `setops`, il # depose `10-setops.conf` — et l'ancien EST RESTE. Mesure sur forge-01 : les deux paires # coexistent, et elles ne disent pas la meme chose (`MaxSessions 2` contre `10`). # # sshd retient LA PREMIERE valeur rencontree pour chaque mot-cle, et lit les drop-ins dans # l'ordre lexical : c'est donc l'ANCIEN fichier qui gagne. Une configuration qu'on croit # avoir remplacee reste aux commandes, en silence, et sa trace se lira un jour comme une # lenteur inexplicable pendant un deploiement parallele. # # Retirer un fichier qu'on ne depose plus fait partie du travail de le deposer. - name: Retirer les configurations SSH d'une nomenclature abandonnee ansible.builtin.file: path: "/etc/ssh/sshd_config.d/{{ item }}" state: absent loop: "{{ ssh_baseline_fichiers_perimes }}" notify: Validate and reload ssh - name: Déployer la configuration SSH Set-OPS ansible.builtin.template: src: 10-setops.conf.j2 dest: /etc/ssh/sshd_config.d/10-setops.conf owner: root group: root mode: "0644" notify: Validate and reload ssh - name: Activer et démarrer SSH ansible.builtin.systemd: name: ssh enabled: true state: started # Voir defaults/main.yml pour le raisonnement (etat par entree, pas d'`exclusive`). - name: Autoriser — ou révoquer — les clés d'administration déclarées au plan ansible.posix.authorized_key: user: "{{ ssh_baseline_admin_user }}" key: "{{ item.cle }}" state: "{{ item.etat | default('present') }}" comment: "{{ item.pourquoi | default(omit) }}" loop: "{{ ssh_baseline_cles_admin }}" loop_control: label: "{{ item.pourquoi | default(item.cle[:40]) }} → {{ item.etat | default('present') }}" when: not ansible_check_mode