新しいパソコンでgitのセットアップを行い、プライベートリポジトリのcloneを行ったが以下のエラーにより失敗した。

Cloning into 'note'...
[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.

調べたが、それはsshの設定を行なっていないためだ!みたいな記事が出てきて、sshのセットアップはした上で接続が失敗しているだけの場合の具体的な対処法が出てこなかったのでメモする。


経緯

以下の記事を参考にsshの生成と登録を行なった。

この際、これまでの経験からsshを複数作成することが予想できたのでファイル名を自分で指定するため、以下のコマンドで鍵を生成した。

なお、現在地は、~/.sshであり、-f id_rsa_githubによりファイル名を指定している。.sshディレクトリが存在しない場合はルートディレクトリでmkdir .sshをして、cd .sshで移動したあとに実行する。

ssh-keygen -t rsa -f id_rsa_github

ここに、sshの設定を行うため、configファイルを作成し、以下の内容を設定した。もちろん、テキストエディターを使って作成しても良いし、vimを使って作成してもOK。

Host github
  HostName github.com
  IdentityFile ~/.ssh/id_rsa_github
  User git

その上で、Githubに公開鍵を登録した。ちなみに、クリップボードにコピーしてからGithubに登録すると思うが、その方法として、~/.ssh/id_rsa_github.pubをテキストエディターで開いてコピーしても良いし、コマンドでやるのであれば以下のコマンドでクリップボードへコピーする。

pbcopy < ~/.ssh/id_rsa_github.pub

登録・設定が正しくできていることを確認するため、以下のコマンドを実行する。

ssh -T github

すると、以下の返答が得られ、成功した。

Hi yu9824! You've successfully authenticated, but GitHub does not provide shell access.

これでssh接続がうまくいったと思ったので、プレイベートリポジトリを以下のコマンドでcloneした。

git clone [email protected]:yu9824/XXX.git # XXXはリポジトリ名

すると、以下の返答が得られ、失敗したとのことだった。

Cloning into 'XXX'...
[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.

上記でsshの設定は正しくできたと思っていたので、git configの設定がうまくいっていないかと思い、それぞれ確認したが、usernameおよびemailは適切に設定されていた。

解決

方法

sshのconfigを以下に書き換えた。

Host github.com
  HostName github.com
  IdentityFile ~/.ssh/id_rsa_github
  User git

これでcloneし直すと、成功した。

考察

cloneするときのコマンドは以下(再掲)。

git clone [email protected]:yu9824/XXX.git # XXXはリポジトリ名

[email protected]に注目すると、<username>@<hostname>なので、HostNameだけ正しく設定しておけばOKだと思っていた。しかし、configが正しく呼び出されなかったため、適切な秘密鍵を呼び出すことができず、cloneがうまくいかなかった。

したがって、Hostもgithub.comとすることでconfigに書かれた設定が正しく呼び出され、cloneできるようになったと思われる。

関連

https://note.yu9824.com/howto/2021/08/05/establish-ssh-mac-to-linux/