【GitHub・SSHキー設定】git push -u origin mainができない！

# はじめに

リモートリポジトリにpushしようと思い、
表題の通り、`git push -u origin main`を実行した結果、以下のエラーが発生してしまった、、、

```
The authenticity of host 'github.com (20.27.177.113)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com,20.27.177.113' (ECDSA) 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.
```

このエラーメッセージの意味を調べると要するに
`Gitリポジトリへの接続の際、SSHキー接続の認証に失敗した`ということらしいです。。

以下のコマンドを実行するとSSHキーが正しく設定されているかどうかを確認できます
```
ssh -T git@github.com
```


試しに実行してみるとやはりSSH接続に必要な認証情報が無効っぽい
```
git@github.com: Permission denied (publickey).
```

この問題を解決するには`新たにSSHキーを追加して`、
リモートリポジトリにアクセスできるように設定する必要があるらしいので
* 新しいSSHキーを作成
* SSHキーをリモートリポジトリに追加する

という順番で設定を行なっていきます。

# 新しいSSHキーを作成

まずは以下のコマンドを実行して、新しいSSHキーを生成します。
```
ssh-keygen -t rsa -b 4096 -C "githubに登録しているメールアドレス"
```

実行すると以下のようメッセージが表示されます。

```
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/username/.ssh/id_rsa): 
```
これは`秘密鍵を保存するためのファイル名を入力するよう`に求めるメッセージです。
デフォルトでは`id_rsa`というファイル名になりますが
任意のファイル名を設定する場合は設定したいファイル名を入力してください。
どうでもいい場合はEnterキーを押して飛ばしてください。

次に以下のメッセージが表示されます。
```
Enter passphrase (empty for no passphrase): :
```
これはパスワードの設定を求めるメッセージです。
パスワードを設定する場合は設定したいパスフレーズを入力してください
もう一度入力を求められるので同じパスフレーズを入力してください。
必要ない場合は2回Enterキーを押して飛ばしちゃってください。

 以下のメッセージが表示されれば無事SSHキー作成は完了です👌

```
Your identification has been saved in /Users/username/.ssh/id_rsa.
Your public key has been saved in /Users/username/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx email@example.com
The key's randomart image is:
+---[RSA 4096]----+
|     o=+==+.     |
|     o++=+o      |
|     .+.B.+      |
|      o.*.o      |
|     .oS+= .     |
|     .+=B.o      |
|      +=Oo..     |
|     . *.*.      |
|      E oo.      |
+----[SHA256]-----+
```

#  SSHキーをリモートリポジトリに追加する

まずは公開鍵をクリップボードにコピーします。
```
Macの場合
pbcopy < ~/.ssh/id_rsa.pub

Windowsの場合        	
clip < ~/.ssh/id_rsa.pub
```

もしくはcatコマンドを使えばターミナル上に公開鍵の中身を表示できるので
表示された内容をコピーするでも大丈夫です。
```
% cat ~/.ssh/id_rsa.pub
<!-- 以下をコピー -->
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCZr+IiNGJlobDASK/RwItasd
fNb1PJzO0vUJSX3NJQFsAqtasdfsaWHfsHZzP9UhHd8zMBsasdfrtw4cFp1zEM
i1im35AjU7n52AdgZRNF/ZSAszR8VT9LasdfgadpD1XfUhcYDipCkqafh9x96O
TVf/nPKn8Have+ofd2p+CIqnkCnmRySeo3NK0Yx7PFflyiLOWQvjj+xecdU3jA
dUPA0/sxcGrbUjUAhif4CAGBJSnXOi4FrGahn52wGPwUdr10HqjC3do0Dw5Ptr
iz1RQA6C7FahDLwb41pfqHc6/PjasodihasdsapoFkNzOswusDqbeAwXXUqrAx
7/AibrfHsMFXNLvt01dii/zWIMoGLS7+lfthKTLTk5CC/J1HqBHBbLyOrJDn/A
Tk6GdtmdR+upzmMxmGJIimHb+eIL12IJOBL2z72nasdgasqjLojLdJNgxxffmv
CwLl0jaYH2Hstd2aNkyYAEd+aRuLOUkAPEHloSHeY+nSqnZ0SqrSj4cw6EgRss
u6WNsSw== email@example.com
```

公開鍵をコピーしたらGithubにアクセスしましょう！
アクセスできたらSSHキーの登録画面を表示します。手順は以下を参考にしてください。
* 画面の右上に表示されている「アイコン」をクリックし「Settings」をクリック
* アカウント設定の中から`SSH and GPG keys`をクリック
* 表示された画面上の`New SSH Key`ボタンをクリック
以上の手順で3枚目の写真と同様の画面が表示されればOKです。
![スクリーンショット 2023-04-15 17.05.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2943591/a7eb1df2-b9e6-df03-b8c1-ecaaedddcf4a.png)

![スクリーンショット 2023-04-15 17.23.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2943591/99374418-7dbd-2ce8-3076-4e9046898767.png)


![スクリーンショット 2023-04-15 17.10.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2943591/ef60044b-a820-9e0c-8541-8f9fde97ea5b.png)

画面の`Title`欄に任意の名前を指定して`Key`欄に先ほどコピーした公開鍵の内容を貼り付けて
`Add SSH Key`ボタンをクリックすれば登録完了です👍

SSH接続ができるようになったか確認するため、
ターミナルに戻り、冒頭に実行した以下のコマンドをもう一度実行してみます。
```
ssh -T git@github.com
```

実行後、以下のメッセージが表示されればSSH接続は成功です🎉
```
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
```

その後、`git push -u origin main` を実行したら無事プッシュできました！
めでたしめでたし、、、

# 最後に

プログラミング初心者にとってはリモートにプッシュするだけでも一苦労です😅
これからもトライアンドエラーを繰り返していきたいと思う所存です

完