Set-OPS-Public/ansible.cfg
Daniel Allaire ed6087d5de ansible : pipelining + ControlPersist — la course « banner exchange » comprise
Cette fois j'ai garde le journal, et la cause est etablie.

La machine : un seul demarrage toujours en cours, aucune coupure reseau, aucun
redemarrage de sshd. Le « trou » de 72 s dans son journal n'en etait pas un —
l'entree qui le referme est ma propre commande de diagnostic. L'hote n'a rien
fait parce que plus personne ne lui parlait.

La cause : maxstartups 5:30:20 et maxsessions 2 (defauts Debian 10:30:100 et
10). Au-dela de 5 connexions non authentifiees simultanees, sshd en refuse une
partie SANS BANNIERE — et le client rapporte « timed out during banner
exchange », qui accuse le reseau pour un refus applicatif.

Ces valeurs ne viennent d'aucun role : elles sont dans le GABARIT. Un reglage
de securite qui ne vit que dans une image disque est invisible du depot et des
preuves, et gouverne pourtant la voie d'administration.

Corrige cote client : ansible.cfg n'avait AUCUNE section [ssh_connection].
pipelining + ControlPersist + control_path_dir court (un chemin trop long
depasse la limite des sockets UNIX et ferait retomber Ansible sur une
connexion par tache).

Mesure sur le meme play de 30 taches : avant, une session par seconde ; apres,
ZERO nouvelle session.

Reste ouvert : MaxStartups/MaxSessions devraient etre declares par
ssh_baseline plutot que dormir dans le gabarit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-09 12:35:01 -04:00

33 lines
1.4 KiB
INI

[defaults]
inventory = instance/inventories/lab/hosts.yml
roles_path = roles
filter_plugins = filter_plugins
interpreter_python = auto_silent
host_key_checking = False
retry_files_enabled = False
stdout_callback = default
[privilege_escalation]
become = True
become_method = sudo
become_user = root
[ssh_connection]
# Le sshd des hotes est DURCI par le gabarit, bien en dessous des defauts Debian :
# maxstartups 5:30:20 (defaut 10:30:100) maxsessions 2 (defaut 10)
# Au-dela de 5 connexions NON AUTHENTIFIEES simultanees, sshd en refuse une partie
# SANS envoyer de banniere — et l'echec se lit « Connection timed out during banner
# exchange », qui accuse le reseau. Mesure le 2026-08-09 sur infra-dns-01 : les sessions
# arrivaient a une par seconde, puis plus rien ; l'hote n'avait ni redemarre ni perdu son
# reseau, c'est Ansible qui ne parvenait plus a entrer.
#
# On ouvre donc MOINS de connexions au lieu d'affaiblir l'hote :
# pipelining — une seule connexion par tache au lieu de plusieurs allers-retours
# ControlPersist — la connexion maitresse survit entre les taches
# `ControlPath` court : un chemin trop long depasse la limite des sockets UNIX et fait
# retomber Ansible sur une connexion par tache, ce qui ramenerait le probleme.
pipelining = True
ssh_args = -C -o ControlMaster=auto -o ControlPersist=300s -o PreferredAuthentications=publickey
control_path_dir = /tmp/.ansible-cp
retries = 3