Message d’erreur
userauth_pubkey: signature algorithm ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
Également affiché sous la forme
- userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
- userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedKeyTypes [preauth]
- userauth_pubkey: signature algorithm ssh-ed25519 not in PubkeyAcceptedAlgorithms [preauth]
Formulation selon la version de sshd (vérifiée dans les sources d’OpenSSH) : 9.0 et versions ultérieures, « signature algorithm … not in PubkeyAcceptedAlgorithms » ; de 8.5 à 8.9, « key type … not in PubkeyAcceptedAlgorithms » ; 8.4 et versions antérieures, « key type … not in PubkeyAcceptedKeyTypes » (l’option a été renommée en 8.5). L’algorithme cité dans le message varie selon le client et la restriction appliquée par le serveur.
OpenSSH server (sshd) log — the client sees only "Permission denied (publickey)."
Ce que cela signifie
Le journal du serveur explique un « Permission denied (publickey) » : le client a présenté un algorithme de signature que le serveur n’accepte pas. Avec `ssh-rsa`, il s’agit du schéma de signature RSA fondé sur SHA-1, désactivé par défaut depuis OpenSSH 8.8 (2021). La clé RSA elle-même est correcte (la même clé fonctionne avec les algorithmes `rsa-sha2-256`/`rsa-sha2-512`), mais le client (un ancien OpenSSH, une bibliothèque obsolète ou un équipement embarqué) ne connaît que la variante SHA-1.
Pourquoi cela se produit
Un ancien client ou une ancienne bibliothèque SSH signe avec ssh-rsa
fréquenteOpenSSH avant la version 7.2, Paramiko avant la 2.9 (utilisé aussi par le plugin de connexion paramiko d’Ansible), le JSch d’origine 0.1.55 (plugins Jenkins, IDE), les anciennes versions de golang.org/x/crypto et de nombreux équipements réseau ne produisent que des signatures `ssh-rsa`.
Le serveur restreint davantage les algorithmes
occasionnelleLes guides de durcissement réduisent `PubkeyAcceptedAlgorithms` à une courte liste (par exemple Ed25519 et ECDSA uniquement) ; les clés RSA ou Ed25519 hors de cette liste sont refusées, comme le montre l’alias avec `ssh-ed25519`.
Une clé DSA
occasionnelle`ssh-dss` est désactivé depuis OpenSSH 7.0 et a été supprimé dans la version 10.0. Les clés DSA doivent être remplacées.
Comment corriger l’erreur
- 1.
Utiliser une clé moderne ou un client moderne
Une clé Ed25519 évite complètement le problème RSA/SHA-1 ; sinon, mettez à jour la bibliothèque cliente pour qu’elle négocie `rsa-sha2-*`.
bash # Best: a modern key type, which every current client signs correctly ssh-keygen -t ed25519 -C "deploy@ci" -f ~/.ssh/deploy_ed25519 # Or keep the RSA key and use a client that supports rsa-sha2-256/512 # (OpenSSH >= 7.2, Paramiko >= 2.9, JSch fork 0.2.x, golang.org/x/crypto >= 2022, PuTTY >= 0.75) - 2.
Autoriser ssh-rsa de façon ciblée, si nécessaire
Un bloc `Match` limité à un seul équipement ancien tient les signatures SHA-1 à l’écart de tous les autres. Considérez-le comme temporaire.
text # /etc/ssh/sshd_config.d/legacy-device.conf - only for one legacy client, and remove it afterwards Match Address 10.0.5.17 PubkeyAcceptedAlgorithms +ssh-rsa
Erreurs associées
Permission denied (publickey).OpenSSH client (ssh, scp, sftp, git over SSH)Unable to negotiate with 127.0.0.1 port 22: no matching host key type found. Th…OpenSSH client (8.8+) connecting to a server that only offers legacy host key algorithmsssh: handshake failed: ssh: unable to authenticate, attempted methods [none pub…golang.org/x/crypto/ssh (Go)