Le mystère de la clé SSH refusée

Parmi les recommandations les plus courantes lors de l'utilisation du protocole SSH, l'utilisation de clés est probablement la plus fréquente.

Utiliser une paire de clés (publique et privée) en lieu et place d'un mot de passe améliore la sécurité lors de l'authentification et permet d'automatiser les connections et transferts de fichiers vers une machine distante.

Et donc par défaut, je génère une paire de clés pour tout nouveau système auquel je dois me connecter régulièrement.

Le problème auquel je me suis confronté est le suivant : ayant accès à un nouveau serveur, je crée les clés nécessaires, effectue l'installation initiale et teste le tout. Aucun souci.

Puis quelque jours suivants, ayant besoin de me connecter à un de mes serveurs habituels (et non pas le nouveau), ma connexion SSH échoue avec le message "Too many authentication failures".

Mon premier réflexe est de vérifier que mon fichier de configuration SSH est correct (ce qui est le cas) puis de tenter la même opération en augmentant la verbosité des messages d'erreurs. Pas de solution, le message d'erreur demeure identique.

Ayant accès direct au serveur en question je vérifie les fichiers journaux qui confirment que trois tentatives d'authentification ont effectivement échoué, ce qui est étrange, car je n'effectue qu'une connexion à chaque fois.

Je tente alors d'effectuer une connexion SSH "pure" en utilisant un mot de passe et non pas de clé. Succès. Puis une autre connexion en ne chargeant uniquement la clé destinée à ce serveur avec ssh-agent. Succès à nouveau.

Il semble donc que le problème soit lié à l'utilisation de la clé avec ssh-agent ; non pas que la clé ne soit pas chargée correctement, mais qu'une "mauvaise" clé soit utilisée à la place. En continuant sur cette piste je réalise qu'à partir du moment où ma clé SSH est listée en quatrième position ou plus avec ssh-agent, l'accès est refusé. Ce qui correspond aux erreurs vues précédemment dans les fichiers journaux.

En vérifiant le fichier de configuration d'OpenSSH sur le serveur cible, je vois qu'une des directives est "MaxAuthTries" avec une valeur de "3". La page de manuel est assez claire, indiquant que cette valeur est le nombre d'essais maximum autorisés, la valeur par défaut étant "6".

Et c'est là que je comprend où se trouve la source du problème : ssh-agent charge un certain nombre de clés lors de l'ouverture de ma session, clés chargées dans l'ordre alphabétique des noms de fichiers.

Lors d'une nouvelle connexion ssh-agent envoie au serveur toutes les clés listées dans l'ordre où elles ont été chargées (ce que l'on peut vérifier avec la commande ssh-add -l) jusqu'à ce qu'une des conditions suivantes soit remplie : 1) la clé appropriée est disponible et la session SSH est établie ou 2) le serveur ayant refusé plus de "mauvaises clés" que la valeur de la directive "MaxAuthTries" le message d'erreur "Too many authentication failures" est retourné.

La solution consiste donc simplement à augmenter la valeur de la directive "MaxAuthTries" sur le serveur, de manière à ce que la clé appropriée puisse être chargée et utilisée automatiquement.

Au final quelques recommandations pour l'utilisation de clés SSH :

- Ne pas charger toutes les clés existantes avec ssh-agent, limitez-vous au nécessaire, quitte à ajouter de nouvelles clés en cours de session.

Je n'ai pas effectué de test avec PuTTY et Pageant mais il est probable que la situation soit identique.

- Ne pas définir de valeur trop faible pour la directive "MaxAuthTries" ; elle n'est pas utilisée uniquement pour l'authentification par mot de passe, mais pour toute forme d’authentification.

publié le 21 août 2019