本文へスキップ
ecdsa.com
OpenSSH client with an SSH agent (ssh-agent, gpg-agent, 1Password, Secretive, Windows OpenSSH agent)SSH

エラーメッセージ

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

別の表記

  • 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

鍵の種類と秘密鍵ファイルのパスは環境によって異なります(`RSA`、`ED25519`、`ECDSA-SK` など)。OpenSSH 8.3 以前は、より短い「sign_and_send_pubkey: signing failed: agent refused operation」を出力していました(7.9 と 8.4 のソースで確認)。

このエラーの意味

サーバーが提示された公開鍵を受け入れたため、ssh は SSH エージェントに認証チャレンジへの署名を依頼しましたが、エージェントがこれを拒否しました。鍵は存在し、サーバーも受け入れる状態ですが、秘密鍵による処理そのものが実行されませんでした。エージェントが拒否するのは、得られないユーザー操作(確認、PIN、タッチ)が必要な場合か、一覧には表示されていても、その鍵の実体(鍵データ)がもう使用できない場合です。

発生する理由

修正方法

  1. 1.

    応答しているエージェントを特定し、鍵を読み込み直す

    `SSH_AUTH_SOCK` から使用中のエージェントがわかり、`ssh-add -l` でそのエージェントが保持している鍵を一覧表示できます。鍵を削除して追加し直すと、古いエントリが消去されます。

    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.

    gpg-agent にプロンプト用のターミナルを渡す

    gpg-agent が SSH キーを提供している場合、PIN のプロンプトは、gpg-agent に通知された TTY に表示されます。現在のシェルから gpg-agent の TTY 情報を更新してください。

    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

関連するエラー

署名エラーデータベースをすべて見る