Mensaje de error
sign_and_send_pubkey: signing failed for RSA "/path/to/key" from agent: agent refused operation
También se muestra como
- 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
El tipo de clave y la ruta de la identidad varían (`RSA`, `ED25519`, `ECDSA-SK`…). OpenSSH 8.3 y las versiones anteriores imprimían el texto más corto «sign_and_send_pubkey: signing failed: agent refused operation» (comprobado en el código fuente de 7.9 y 8.4).
Qué significa
El servidor aceptó la clave pública ofrecida, así que ssh pidió al agente SSH que firmara el desafío de autenticación, y el agente se negó. La clave existe y el servidor la aceptaría; lo que no llegó a ocurrir es la propia operación con la clave privada. Los agentes se niegan cuando necesitan una interacción del usuario que no pueden obtener (una confirmación, un PIN, un toque) o cuando el material de clave que hay detrás de la clave listada ya no se puede usar.
Por qué ocurre
El agente necesita una confirmación que no puede mostrar
frecuenteClaves añadidas con `ssh-add -c`, agentes de 1Password/Bitwarden/Secretive que piden aprobación o avisos del llavero de macOS, mientras ssh se ejecuta a través de SSH, en un contenedor o sin una sesión gráfica (falta `SSH_ASKPASS`).
Un token de hardware o gpg-agent no puede firmar
frecuenteUna YubiKey/tarjeta inteligente que se retiró o que no se tocó a tiempo, un PIN de PIV bloqueado o gpg-agent sin un pinentry utilizable (sin `GPG_TTY`). El agente sigue listando la clave, pero no puede usarla.
La clave del agente y el archivo de identidad no coinciden
ocasional`-i ~/.ssh/key` con un archivo `.pub` que pertenece a otra clave, o una clave sustituida en el disco mientras el agente conserva la antigua. Volver a cargar la clave en el agente lo soluciona.
Cómo solucionarlo
- 1.
Averiguar qué agente responde y volver a cargar la clave
`SSH_AUTH_SOCK` indica qué agente está en uso; `ssh-add -l` lista lo que contiene. Eliminar la clave y volver a añadirla borra las entradas obsoletas.
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.
Dar a gpg-agent una terminal para las solicitudes
Cuando gpg-agent sirve claves SSH, muestra las solicitudes de PIN en la TTY que se le indicó; actualízalo desde el shell actual.
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