ポートフォリオを公開したく、GitHub に新しいアカウントを作ったのですが、

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 に登録する

GitHub と通信するための鍵を作ります。

1$ ssh-keygen -t rsa

できた公開鍵を GitHub に登録します。

私は、鍵を複数管理している都合上、 id_rsa ではなく、新しく github_id_rsa という名前の鍵を作りました。

鍵名を通常の id_rsa で作る場合は、以降のコマンド類を適宜、読み替えてくださいね。

接続確認

鍵登録後 SSH コマンドで GitHub に挨拶してみます。

1$ ssh -T git@github.com

を実行してみて、

1Hi [account_name] You've successfully authenticated, but GitHub does not provide shell access.

がかえってくれば接続 OK です。
これを目指します。

鍵にゴミが入っていないか

公開鍵を GitHub に登録する時にゴミがついていると認識してくれません。

GitHub ヘルプ
GitHub アカウントへの新しい SSH キーの追加
https://help.github.com/ja/github/authenticating-to-github/adding-a-new-ssh-key-to-your-github-account

上記サイトでは 改行や空白を追加しないでください との記載があり、ゴミが入らないように pbcopy でクリップボードにコピーする、ということが紹介されています。

1$ pbcopy < ~/.ssh/github_id_rsa.pub

パーミッションをチェックする

鍵のパーミッションがゆるい場合です。

これは、通常、デカデカと警告が出るのですぐにわかるものです。

1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
3@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
4Permissions 0755 for '/Users/atuweb/.ssh/github_id_rsa' are too open.
5It is required that your private key files are NOT accessible by others.
6This private key will be ignored.
7Load key "/Users/atuweb/.ssh/github_id_rsa": bad permissions
8git@github.com: Permission denied (publickey).

これは鍵のパーミッションを適切に締めてあげれば OK です。


chmod を実行します。

1$ chmod 600 ~/.ssh/github_id_rsa
2$ chmod 644 ~/.ssh/github_id_rsa.pub

権限変更後、このようになっていれば OK です。

1$ ls -la ~/.ssh/ | grep github_id_rsa
2-rw-------   1 atuweb  staff  1831 May  4 07:48 github_id_rsa
3-rw-r--r--   1 atuweb  staff   404 May  4 07:48 github_id_rsa.pub

秘密鍵が 644 になっていても でかでかエラーが出なかったケースもあるようで、パーミッションのチェックは必須ですね。

接続時の鍵をチェックする

v オプションを付けることで、SSH 接続のデバッグログをチェックすることができます。

1$ ssh -vT git@github.com

を実行します。

すると、ズラズラとログが出てきます。

1OpenSSH_7.9p1, LibreSSL 2.7.3
2debug1: Reading configuration data /Users/atuweb/.ssh/config
3debug1: Reading configuration data /etc/ssh/ssh_config
4debug1: /etc/ssh/ssh_config line 48: Applying options for *
5debug1: /etc/ssh/ssh_config line 52: Applying options for *
6debug1: Connecting to github.com port 22.
7debug1: Connection established.
8debug1: identity file /Users/atuweb/.ssh/id_rsa type -1
9:

GitHub に登録した鍵は github_id_rsa ですが、どうやら id_rsa が使われているようです。

これでは認証できないですよね。

今回の原因

今回は SSH の設定が誤っていました。

はじめ、

1$ vim ~/.ssh/cofig
2Host github
3  User git
4  Port 22
5  HostName github.com
6  IdentityFile  ~/.ssh/github_id_rsa
7  IdentitiesOnly yes

というように 設定を入れていました。

これは、次にマッチします。

1$ ssh git@github

しかし、次にはマッチせずに、config の定義が読まれないんですね。

1$ ssh git@github.com

1Host github
2  HostName github.com

上記はつまりホスト名を github というエイリアスで呼んだ時に、その設定をロードする、ということなんですね。


1$ ssh -T git@github.com

上記コマンドで鍵を当てるために、Host github.com に対応する設定を書き込んであげれば OK で、具体的に ~/.ssh/config をを次にすると、問題なく接続できました。

1$ vim ~/.ssh/cofig
2Host github github.com
3  User git
4  Port 22
5  HostName github.com
6  IdentityFile  ~/.ssh/github_id_rsa
7  IdentitiesOnly yes

わかってしまえば、つまらないミスでした。

Connection refused か Permission denied か

当記事は Permission denied の対処についてまとめました。

もしメッセージが Connection refused であれば、GitHub にそもそも届いておらず、原因が別にあるようです。


参考

Qiita
SSH接続でgit pushしたときに警告が出るやつへの対処法
https://qiita.com/tdrk/items/a0554763c29f60e347b5
Qiita
GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~
https://qiita.com/shizuma/items/2b2f873a0034839e47ce#%E8%BF%BD%E8%A8%98-2015531