Pular para o conteúdo
ecdsa.com
OpenSSH client with an SSH agent (ssh-agent, gpg-agent, 1Password, Secretive, Windows OpenSSH agent)SSH

Mensagem de erro

sign_and_send_pubkey: signing failed for RSA "/path/to/key" from agent: agent refused operation

Também aparece 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

O tipo da chave e o caminho do arquivo de identidade variam (`RSA`, `ED25519`, `ECDSA-SK`…). O OpenSSH 8.3 e anteriores imprimiam a forma mais curta “sign_and_send_pubkey: signing failed: agent refused operation” (conferido no código-fonte das versões 7.9 e 8.4).

O que significa

O servidor aceitou a chave pública oferecida, então o ssh pediu ao agente SSH que assinasse o desafio de autenticação — e o agente se recusou. A chave existe e o servidor a aceitaria; o que não aconteceu foi a operação com a chave privada. Os agentes recusam quando precisam de uma interação do usuário que não conseguem obter (uma confirmação, um PIN, um toque) ou quando o material de chave por trás da chave listada já não pode ser usado.

Por que acontece

Como corrigir

  1. 1.

    Descobrir qual agente responde e recarregar a chave

    O `SSH_AUTH_SOCK` indica qual agente está em uso; o `ssh-add -l` lista o que ele guarda. Remover a chave e adicioná-la de novo limpa 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. 2.

    Dar ao gpg-agent um terminal para as solicitações de PIN

    Quando o gpg-agent atende chaves SSH, ele mostra as solicitações de PIN no TTY que lhe foi informado; atualize o TTY do agente a partir do shell atual.

    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

Erros relacionados

Ver toda a base de erros de assinatura