😵

GitHubのクローンでPermission deniedになった話

に公開

git cloneでPermission denied (publickey)…

今回はGitHubのリポジトリをsshでgit cloneした時に起きた権限エラーについてご紹介いたします。
ずっとGitHubを使っていながらハマったので共有の意味も含めブログに残します。
※別の方も記事にしていそうなので被ってたらごめんなさい

前提

以下の設定は完了しているものとして話を進めていきます

  • 鍵の生成とパーミッション設定
  • GitHubとの疎通確認(ssh -T git@github.com)

エラー調査

sshでgit cloneしようとしたら以下のエラーが出ました。

$ git clone git@github.com:{アカウント}/{リポジトリ}.git
Permission denied (publickey).
fatal: Could not read from remote repository.

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

まず確認していただきたいのが.ssh内のconfigファイルです。
自分の場合は以下のようにアカウントAとアカウントBを分けるためにconfigで複数gitのホスト設定をしていました。

# アカウントA
Host github-test
  hostname github.com
  IdentityFile ~/.ssh/id_rsa_test2
  User git

# アカウントB
Host github
  hostname github.com
  IdentityFile ~/.ssh/id_rsa_test1
  User git

アカウントAで作成したリポジトリをgit cloneする際にsshのボタンからそのままコピーすると**Permission denied (publickey)**で権限エラーになります。個人アカウントだとなんの問題もないのでなぜだ…

迷走しそうだったので疎通確認からやり直してみたところ、個人アカウント名が返ってきてました。つまり、今回はgit@github.com=個人アカウントなので、アカウントAで作成したリポジトリの権限がなくエラーになっていました!

$ ssh -T git@github.com
Hi {個人アカウント}! You've successfully authenticated, but GitHub does not provide shell access.

実際にアカウントAのホストで疎通確認すると、きちんとアカウントAの名前で返ってきてました。

$ ssh -T git@github-test
Hi {アカウントA}! You've successfully authenticated, but GitHub does not provide shell access.

解決方法

以下のようにconfigファイルで設定したホスト名にすることでgit cloneができます!

$ git clone git@github-test:{アカウント}/{リポジトリ}.git

理解するとなんてことはないのですが、デフォルトでssh keyをコピーするとgit@github.comになっているので注意しましょう!

さいごに

GitHubアカウントを複数所持する場合はホスト名をそれぞれ区別しやすい名前にしておくと権限エラーになっても気づきやすいかもしれませんね。

Discussion