git clone で「sign_and_send_pubkey: signing failed for RSA “/home/user/.ssh/id_rsa” from agent: agent refused operation [email protected]: Permission denied (publickey).」というエラーが出る件

この記事は最終更新日から1年以上が経過しています。情報が古くなっている可能性があります。

タイトルがめちゃくちゃ長いんだけど、要は新しい Linux (Ubuntu) に SSH で GitHub のリポジトリを clone しようとしたら、

$ git clone [email protected]:hogehoge/fugafuga.git
Cloning into 'fugafuga'...
sign_and_send_pubkey: signing failed for RSA "/home/user/.ssh/id_rsa" from agent: agent refused operation
[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

と言われて clone できなかったという話。

公開鍵・秘密鍵はすでに ~/.ssh/ に入ってるし ~/.ssh/config も設定してる。所有者は実行ユーザーと同じなのでなんでだろうなーと思い、ネットで見かけた

chmod 600 ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa.pub

を実行したらすんなり直ってしまった…。
公開鍵の方はとくに chmod しなくても通ったけど念のため。

パーミッションはたしか 744 になってたので Permission denied ってことはないでしょ…と思っていたけど、どうやら秘密鍵のパーミッションが過剰すぎても Permission denied 扱いになってしまうらしい。

秘密鍵は文字通り秘密の鍵なので、ファイルのオーナー以外は絶対に見れない権限にしておく必要がある。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
これはやらなくても動くみたいだけど、公開鍵は authorized_keys ファイルに統合するのがベストだそう。
chmod 700 ~/.ssh/ && chmod 600 ~/.ssh/id_rsa && chmod 600 ~/.ssh/authorized_keys

この記事 いわく、

  • ~/.ssh/ ディレクトリ … パーミッション 700 (rwx——)
  • 秘密鍵(普通は id_rsa)… パーミッション 600 (rw——-) or 400 (r——–)
  • authorized_keys ファイル … パーミッション 600 (rw——-) or 400 (r——–)

に設定されている必要があるそうなので、上のコマンドを全部実行すれば正しいパーミッションになるはず。
SSH なにもわからない…

コメント