Skip to content

Ansible SSH, Authentication failed, vieilles machines

Auteur : Philippe Le Van - @plv@framapiaf.org

Date : 9 mars 2023

Problématique

On a un souci de connexion SSH sur de vieux serveurs (debian jessie par exemple).

Quand on cherche à déployer avec ansible sur une de ces machines, on reçoit le message suivant :

Failed to authenticate: Authentication failed.

Quand on lance ansible avec le paramètre -vvv, on voit le détail suivant :

1
2
3
4
5
6
<old-server.example.com> ESTABLISH PARAMIKO SSH CONNECTION FOR USER: philippe on PORT 22 TO old-server.example.com
fatal: [old-server.example.com]: UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to authenticate: Authentication failed.",
    "unreachable": true
}

Analyse

Le problème vient d'un changement de comportement de la librairie python paramiko. On peut voir l'issue suivante : https://github.com/ansible/ansible/issues/76737

Pour contourner ce problème, Ansible a ajouté un nouveau paramètre use_rsa_sha2_algorithms qui permet de désactiver le protocole rsa-sha2.

Mais cette option n'est pas disponible dans la version 2.14 d'ansible-core. Vous pouvez consulter La documentation de l'option use_rsa_sha2_algorithms.

Résolution

Mise à jour d'Ansible (indispensable)

La doc nous dit qu'on doit avoir une version d'ansible-core 2.14. Pour cela, nous avons installé Ansible 7.3.0.

Solution par host (recommandée)

Dans l'inventory, on peut ajouter une variable pour indiquer pour un host donné si on doit utiliser l'ancien fonctionnement ou pas :

1
2
3
4
5
6
all:
  hosts:
    old-server.example.com:
      ansible_paramiko_use_rsa_sha2_algorithms: false
    new-server.example.com:
      # on ne met pas le paramètre

Solution au cas par cas (bof)

Au moment de l'appel à ansible, on peut définir une variable d'environnement. J'ai du mal à voir le cas d'usage, mais bon, ça existe.

1
ANSIBLE_PARAMIKO_USE_RSA_SHA2_ALGORITHMS=false ansible-playbook -l old-server.example.com playbook.yml

Solution globale (déconseillée)

Dans ansible.cfg, on peut ajouter les lignes suivantes, mais ça veut dire que tous vos serveurs sont vieillots...

1
2
[paramiko_connection]
use_rsa_sha2_algorithms = true