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
クライアントを設定する
- キーを生成します。
```bash
ssh-keygen
```
- そのキーを使うように SSH を設定します。
```bash
vim ~/.ssh/config
```
- キーをサーバーへコピーします。
```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
