Permission denied (publickey).

EC2 上の自分の Git サーバーに対して git push を実行したとき、次の問題が発生しました。

sign_and_send_pubkey: signing failed: agent refused operation
Permission denied (publickey).
fatal: Could not read from remote repository.

Git のリモート URL を確認し、必要に応じて SSH ホストキーを更新し、正しい SSH キーが生成、読み込み、登録されていることを確認して対処しました。

使用した元の参考資料:

  • <http://stackoverflow.com/questions/13363553/git-error-host-key-verification-failed-when-connecting-to-remote-repository>
  • <https://chenhuachao.com/2016/05/26/ssh%E5%87%BA%E9%94%99-sign-and-send-pubkey-signing-failed-agent-refused-operation/>

以前、2 つ目の出典リンクを載せ忘れていてすみません。見つけたら後で追加します。

リモート URL を確認する

まず、リモート URL が正しいか確認します。

git remote -v

古くなっていたり、間違ったホストを指していたりする場合は更新します。

git remote set-url origin git://new.url.here

SSH リモートの場合、URL は通常このような形式になります。

git remote set-url origin git@github.com:USER/REPO.git

または、プライベート Git サーバーなら次のようになります。

git remote set-url origin USERNAME@SERVERNAME:/path/to/repo.git

known_hosts を更新する

エラーがホストキー検証に関係している場合は、~/.ssh が存在することを確認し、サーバーのホストキーを追加します。

GitHub の場合:

mkdir -p ~/.ssh
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts

自分のサーバーの場合は、github.com をサーバー名または IP アドレスに置き換えます。

ssh-keyscan -t rsa SERVERNAME >> ~/.ssh/known_hosts

すでに ~/.ssh/known_hosts がある場合、既存のホストキーが間違っている理由を理解していない限り削除しないでください。ホストキーが予期せず変更されている場合は、新しいキーを受け入れる前にサーバーのフィンガープリントを確認してください。

SSH キーを生成する

まだキーがない場合は生成します。

ssh-keygen -t rsa -C "user.email"

デフォルトの公開鍵パスは通常次のとおりです。

~/.ssh/id_rsa.pub

その .pub ファイルの内容を、GitHub プロフィールの SSH keys 一覧、または Git サーバーの authorized keys に追加します。

GitHub の場合、公開鍵は次のコマンドで表示できます。

cat ~/.ssh/id_rsa.pub

クライアントを設定する

  1. キーを生成します。

```bash
ssh-keygen
```

  1. そのキーを使うように SSH を設定します。

```bash
vim ~/.ssh/config
```

  1. キーをサーバーへコピーします。

```bash
ssh-copy-id -i /path/to/key.pub SERVERNAME
```

手順 2 の config ファイルには、次のような内容を記述します。

Host SERVERNAME
    HostName ip-or-domain-of-server
    User USERNAME
    PubkeyAuthentication yes
    IdentityFile /path/to/key

IdentityFile には、次のような絶対パスを使います。

IdentityFile ~/.ssh/id_rsa

キーを ssh-agent に読み込む

次のエラーが表示される場合:

sign_and_send_pubkey: signing failed: agent refused operation

ssh-agent を起動してキーを追加します。

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

その後、SSH 接続をテストします。

GitHub の場合:

ssh -T git@github.com

自分のサーバーの場合:

ssh -T SERVERNAME

SSH 認証が動作するようになったら、Git コマンドをもう一度試します。

git push

Leave a Reply