【Git】git cloneをする際に発生するPermissionエラー対処(git@github.com: Permission denied (publickey).)

# はじめに
GitHubから`git clone`する際に発生するPermissionエラーの対処方法について記載しております。
初歩的かもしれませんが、ご了承下さい。

# 前提
- GitHubに登録済みの状態(テストアカウント作成)
- Gitの初期設定が未実施の状態
- 使用端末はMacOS(初期でGit導入済み)

※通常では、Gitの初期設定を実施

https://qiita.com/wnoguchi/items/f7358a227dfe2640cce3


:::note info
今回は、GitHubからコードをクローンすることだけにフォーカスしております。
:::

# 内容
GitHubからSSH接続で`git clone`しようとすると以下エラーが発生。
クローンできず。

![スクリーンショット 2022-05-11 0.37.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/84ddaf2a-1865-6dda-3bfa-8844515dc945.png)



```bash:エラー
ma-sato@satsuton Desktop % git clone git@github.com:atom/atom.git
Cloning into 'atom'...
The authenticity of host 'github.com (52.192.72.89)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
ma-sato@satsuton Desktop %
```

# 対処
以下の流れで対処を実施します。

①ターミナルにて公開鍵・秘密鍵の作成
②公開鍵をGitHubにアップする
③GitHub接続確認
④再度、git clone実施

## ①ターミナルにて公開鍵・秘密鍵の作成
ターミナルにて公開鍵と秘密鍵を作成します。

- 鍵を入れるフォルダに移動

```bash:コマンド
cd ~/.ssh
```

```bash:実行例
ma-sato@satsuton .ssh % cd ~/.ssh
ma-sato@satsuton .ssh % pwd
/Users/ma-sato/.ssh
ma-sato@satsuton .ssh %
```

- 鍵を作成

```bash:コマンド
ssh-keygen -t rsa
```

上記コマンドを実行すると、3つ程聞かれるので入力をする。

| 確認項目 | 入力内容 | 備考 |
| --- | --- | --- |
| Enter file in which to save the key | 公開鍵と秘密鍵を格納するパスを指定(絶対パス) | 例)`/Users/ma-sato/.ssh/testid_rsa`<br><br>※デフォルトの場合は、以下になります。デフォルトで問題ない場合は、そのまま`Enter`を押下。<br>`/Users/ユーザーディレクトリ/.ssh/id_rsa` |
| Enter passphrase (empty for no passphrase): | パスフレーズ(パスワード)の入力 | 今回は何も入力せずそのまま実行<br>※パスフレーズは設定されない状態 |
| Enter same passphrase again: | パスフレーズ(パスワード)をもう一度入力 | 今回は何も入力せずそのまま実行<br>※パスフレーズは設定されない状態 |


```bash:実行例(鍵情報があるため一部省略しております。)
ma-sato@satsuton .ssh % ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/ma-sato/.ssh/id_rsa): /Users/ma-sato/.ssh/testid_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/ma-sato/.ssh/testid_rsa
Your public key has been saved in /Users/ma-sato/.ssh/testid_rsa.pub
```

- 鍵を確認

対象のディレクトリに鍵ができていることを確認。

```bash:実行例
ma-sato@satsuton .ssh % ls -la /Users/ma-sato/.ssh/ | grep testid
-rw-------   1 ma-sato  staff  2610  5 10 08:50 testid_rsa
-rw-r--r--   1 ma-sato  staff   577  5 10 08:50 testid_rsa.pub
ma-sato@satsuton .ssh %
```

ファイルの説明は、以下になります。

|  TH  |  TH  |  TH  |
| ---- | ---- | ---- |
|  testid_rsa.pub  |  公開鍵  |  GitHubに登録を行う鍵(第三者への公開は問題ない)  |
|  testid_rsa  |  秘密鍵  |  ローカルに保持しておく鍵(第三者への公開は厳禁)  |

## ②公開鍵をGitHubにアップする

- GitHubにログインを実施

https://github.co.jp/

- 右上のアイコンをクリックし、`Settings`をクリック

![スクリーンショット 2022-05-10 23.56.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/784b5423-b8a9-843f-77e0-f4d16dc0f1c2.png)

- 左側のメニューから`SSH and GPG keys`をクリック

![スクリーンショット 2022-05-10 23.56.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/f248e06c-0043-d80d-4bda-7ea56374863a.png)

- SSH Keysの`New SSH key`をクリック

![スクリーンショット 2022-05-10 23.57.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/89eab9c4-2da4-f8ec-bd27-a073dae5ef44.png)

- `Title`に任意の鍵の名前、`Key`に公開鍵(`testid_rsa.pub`)の内容をコピー&ペーストで入力。

入力後、`Add SSH key`をクリック。

![スクリーンショット 2022-05-10 23.58.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/83ad941e-7e8e-ad52-ce67-905740629488.png)

※公開鍵の内容は、以下で確認可能(他にも確認方法があるとは思います。)

```bash:公開鍵確認
ma-sato@satsuton .ssh % cat testid_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAAQ*****************************(一部省略)
ma-sato@satsuton .ssh %
```

- `SSH keys`に鍵が登録できていることを確認。

![スクリーンショット 2022-05-10 23.58.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636476/e3db57bd-c539-2df0-f362-3388b96e23cc.png)

## ③GitHub接続確認

- 以下のコマンドを実行

```bash:コマンド
ssh -T git@github.com
```

以下のようなメッセージが表示されればGitHubへの接続が成功しております。

```bash:実行例
ma-sato@satsuton .ssh % ssh -T git@github.com
Hi masuwa9028! You've successfully authenticated, but GitHub does not provide shell access.
ma-sato@satsuton .ssh %
```

### Permissionエラーが表示された場合
**①ターミナルにて公開鍵・秘密鍵の作成**にてファイル名を設定している場合は、以下のエラーが表示される。

```bash:エラー
ma-sato@satsuton ~ % ssh -T git@github.com
git@github.com: Permission denied (publickey).
ma-sato@satsuton ~ %
```

対処は、以下になります。

- 以下のファイルを作成

```bash:コマンド
touch ~/.ssh/config
```

```bash:実行例
ma-sato@satsuton .ssh % touch ~/.ssh/config
ma-sato@satsuton .ssh % ls ~/.ssh/config
/Users/ma-sato/.ssh/config
ma-sato@satsuton .ssh %
```

- 作成したファイルに以下の内容を記載する。

```bash:コマンド
vim ~/.ssh/config
```

```bash:記載例
Host github github.com
  HostName github.com
  IdentityFile ~/.ssh/秘密鍵のファイル名
  User git
```

※今回の場合は、以下になります。

```bash:今回の場合
Host github github.com
  HostName github.com
  IdentityFile ~/.ssh/testid_rsa
  User git
```

- ファイル内容が記載されていることを確認

```bash:コマンド
cat ~/.ssh/config
```

```bash:実行例
ma-sato@satsuton .ssh % cat ~/.ssh/config
Host github github.com
  HostName github.com
  IdentityFile ~/.ssh/testid_rsa #ここに自分の鍵のファイル名
  User git
ma-sato@satsuton .ssh %
```

- 再度、接続を確かめる。

```bash:コマンド
ssh -T github
```

以下のようなメッセージが表示されればGitHubへの接続が成功しております。

```bash:実行例
ma-sato@satsuton .ssh % ssh -T github
Hi masuwa9028! You've successfully authenticated, but GitHub does not provide shell access.
ma-sato@satsuton .ssh %
```

## ④再度、git clone実施
再度、`git clone`を実施する。

```bash:コマンド
ma-sato@satsuton ~ % git clone git@github.com:atom/atom.git
Cloning into 'atom'...
remote: Enumerating objects: 203916, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 203916 (delta 10), reused 10 (delta 10), pack-reused 203901
Receiving objects: 100% (203916/203916), 321.97 MiB | 7.96 MiB/s, done.
Resolving deltas: 100% (144727/144727), done.
ma-sato@satsuton ~ %
```

# 原因
対処で記載している通り、SSH接続の初期設定忘れになります。

# 参考記事
https://qiita.com/shizuma/items/2b2f873a0034839e47ce