Permission denied (publickey) の 対処方法はだいたいこれ
GitHub への SSH 接続で Permission denied (publickey) 言われたのだが
GitHub に新しいアカウント作成し、 clone したところ次のメッセージがかえりました。
1git@github.com: Permission denied (publickey).
2fatal: Could not read from remote repository.
3
4Please make sure you have the correct access rights
5and the repository exists.
正しく設定したつもりだったのですがなぜでしょうか ?
原因を探って対処しましょう。
GitHub へ SSH 接続する手順おさらい
GitHub へ SSH 接続する手順をおさらいします。
- 秘密鍵・公開鍵を作成する
- GitHub に公開鍵を登録する
- 必要ならば、デフォルト鍵を設定する
この手順を終えていることが前提です。
GitHub との疎通テストを行う
GitHub と SSH 接続できるかどうかは、次のコマンドでかんたんにチェックが可能です。
1$ ssh -T git@github.com
こちらをターミナルで実行します。
NG パターン
SSH 接続ができない場合は、次のようなエラーメッセージとなります。
1git@github.com: Permission denied (publickey).
2fatal: Could not read from remote repository.
3
4Please make sure you have the correct access rights
5and the repository exists.
OK パターン
SSH 接続に成功すれば次のように GitHub から挨拶がかえってきます。
1Hi [account_name] You've successfully authenticated, but GitHub does not provide shell access.
この挨拶がかってくる状態を目指します。
SSH コマンドのデバッグログで鍵を確認する
ssh コマンドは v
オプションを付けることでデバッグログが出力されます。
つまりこうです。
1$ ssh -vT git@github.com
v
オプションつきで疎通テストを実行してみましょう。
ズラズラーとログが出てきますが、見るところは identity file
だけです。
1debug1: identity file /Users/[user_name]/.ssh/id_rsa type -1
identity file
に続いて、 SSH 接続時に使用した鍵のファイルパスが示されています。
上記では /Users/[user_name]/.ssh/id_rsa
つまり ~/.ssh/id_rsa
が使用されている事がわかります。
ケース別対処法
秘密鍵がそこにあるか ?
鍵ファイルが本当に存在するかどうか、念のため調べてみましょうか。
ls コマンドを実行し、目的のファイルがあれば OK です。
1$ ls ~/.ssh
「そんなことないでしょ」かもですが、つい先日、鍵設定後にリネームしたということがありました。
ないとは思っても、ひとつひとつ丁寧に潰していく姿勢が大事です。
秘密鍵と公開鍵の組み合わせは正しいか ?
SSH 鍵はコマンドで生成します。
1$ ssh-keygen -t rsa
このコマンドはファイルパスを指定しない場合 ~/.ssh/id_rsa
を上書きする挙動です。
英語メッセージでわけがわからと、 Enter 連打しませんでしたか ?
そんな感じで実は秘密鍵、公開鍵が上書きされて中身が変わっていた、はありえます。
このケースならば、今存在する公開鍵を GitHub に改めて登録すれば OK ですね。
公開鍵にゴミが入っていないか ?
公開鍵を GitHub へ登録する時にゴミがついていると認識してくれません。
上記、GitHub ヘルプにも 改行や空白を追加しないでください との記載があります。
ゴミが入らないように pbcopy
でクリップボードにコピーする、ということが紹介されています。
1$ pbcopy < ~/.ssh/id_rsa.pub
Windows では GitBash などで pbcopy
コマンドを実行すると良さそうです。
使いたい秘密鍵を使っているか ?
SSH はデフォルトで ~/.ssh/id_rsa
鍵を使用します。
たとえば、 GitHub 用に ~/.ssh/github_id_rsa
など、別名で鍵を作成した場合は、追加した鍵を指定しなければなりませんね。
-i
オプションで鍵指定を追加してみましょう。
1$ ssh -vT -i ~/.ssh/bitbucket/id_rsa git@github.com
-i
オプションを付けても、指定した鍵が使われない場合、もしかしたら ~/.ssh/config
の設定が悪さをしているかもしれません。
~/.ssh/config
の設定をミスしていないか ?
~/.ssh/config
に設定を入れているのに、意図した鍵が使用されないということもありました。
具体的に、 ~/.ssh/config
の Host をこうしていました。
1$ vim ~/.ssh/cofig
2Host github
.com
が抜けているので当然なのですが、 ssh git@github.com
ではマッチせず、この設定は読まれません。
対処は、次のようにホスト名を抜けもれなく設定する感じです。
1$ vim ~/.ssh/cofig
2Host github.com
まとめ
GitHub との SSH 接続で Permission denied (publickey)
が発生する場合、次コマンドを実行して使用している鍵を確かめてください。
1$ ssh -vT git@github.com
使用している鍵が identity file
で確認できます。
そこから、鍵があっているか、古くないか、など次の対処に進むことができます。
当記事は Permission denied (publickey)
の対処についてまとめました。
もし、 Connection refused
というメッセージであれば、 GitHub にそもそも届いていないため、ここで紹介したものとは別の原因となりそうです。