Message d’erreur
sign_and_send_pubkey: signing failed for RSA "/path/to/key" from agent: agent refused operation
Également affiché sous la forme
- sign_and_send_pubkey: signing failed: agent refused operation
- sign_and_send_pubkey: signing failed for ED25519 "/path/to/key" from agent: agent refused operation
Le type de clé et le chemin de l’identité varient (`RSA`, `ED25519`, `ECDSA-SK`…). OpenSSH 8.3 et les versions antérieures affichaient le message plus court « sign_and_send_pubkey: signing failed: agent refused operation » (vérifié dans les sources des versions 7.9 et 8.4).
Ce que cela signifie
Le serveur a accepté la clé publique proposée : ssh a donc demandé à l’agent SSH de signer le challenge d’authentification, et l’agent a refusé. La clé existe et le serveur l’accepterait ; c’est l’opération sur la clé privée elle-même qui n’a pas eu lieu. Les agents refusent lorsqu’ils ont besoin d’une interaction de l’utilisateur qu’ils ne peuvent pas obtenir (une confirmation, un code PIN, un toucher), ou lorsque les données de clé derrière la clé listée ne sont plus utilisables.
Pourquoi cela se produit
L’agent a besoin d’une confirmation qu’il ne peut pas afficher
fréquenteClés ajoutées avec `ssh-add -c`, agents 1Password/Bitwarden/Secretive qui demandent une approbation ou demandes d’autorisation du trousseau macOS, alors que ssh s’exécute via SSH, dans un conteneur ou sans session graphique (`SSH_ASKPASS` absent).
Le jeton matériel ou gpg-agent ne peut pas signer
fréquenteUne YubiKey/carte à puce retirée ou non touchée à temps, un PIN PIV bloqué, ou gpg-agent sans pinentry utilisable (pas de `GPG_TTY`). L’agent liste toujours la clé, mais ne peut pas l’utiliser.
La clé de l’agent et le fichier d’identité ne concordent pas
occasionnelle`-i ~/.ssh/key` avec un fichier `.pub` qui appartient à une autre clé, ou une clé remplacée sur le disque alors que l’agent détient encore l’ancienne. Recharger la clé dans l’agent règle le problème.
Comment corriger l’erreur
- 1.
Identifier l’agent qui répond et recharger la clé
`SSH_AUTH_SOCK` vous indique quel agent est utilisé ; `ssh-add -l` liste ce qu’il détient. Retirer puis rajouter la clé élimine les entrées obsolètes.
bash echo "$SSH_AUTH_SOCK" # which agent answers: ssh-agent, gpg-agent, 1Password, ... ssh-add -l # keys the agent holds ssh-add -D && ssh-add ~/.ssh/id_ed25519 # reload a key that the agent cannot use anymore - 2.
Donner un terminal à gpg-agent pour ses demandes de saisie
Lorsque gpg-agent fournit les clés SSH, il affiche les demandes de PIN sur le TTY qui lui a été indiqué ; mettez ce TTY à jour depuis le shell courant.
bash # gpg-agent as SSH agent: tell it which terminal can show the PIN/confirmation prompt export GPG_TTY=$(tty) gpg-connect-agent updatestartuptty /bye