GitHubにSSHで接続する

# はじめに

これまでlocalからGitHubへのpushはHTTPSで接続していましたが
GitHub公式ドキュメントを参考にSSH接続も設定できたので
記録として残しておきます。


# GitHub公式ドキュメント

https://docs.github.com/en/authentication/connecting-to-github-with-ssh

# OS
* macOS Catalina(10.15.7)

# 作業内容
　1. SSHキーの作成
　2. SSHキーをssh-agentに登録する
　3. GitHubにSSHキーを登録する

　`最後に通信テスト`


# 1. SSHキーの作成

ターミナルからssh-keygenコマンドでed25519形式で

* 秘密鍵
* 公開鍵

の２つを生成する。

SSHキーの種類には、よりセキュアなRSAの4096ビット形式もあるようだが、
GitHubの公式ドキュメントでは、何故かレガシーなシステムとして記載があるので
ひとまずed25519形式で作成していく。

個人的に、下記のようにざっくり理解しておく事にした
`セキュリティ面: RSA(4096bit) -> データ量が多いため重い`
`パフォーマンス速度: ed25519　-> データ量が軽い`



```shell:ターミナル

# 既存のSSHキーが存在するか確認
% ls -al ~/.ssh

# 未使用の無駄なSSHキーがあれば削除しておく
% rm -rf ~/.ssh/未使用のキー

# ed25519形式のSSHキーを作成する
# (メールアドレスはGitHubに登録しているものにする)
% ssh-keygen -t ed25519 -C "your_email@example.com"

 ↓ 質問に答えていく

# SSHキーの保存先パスとファイル名を決める
#  -> そのままEnterと押すと()内がデフォルトとなる 
#    ※ 今回はGitHub用のために末尾を「_github」としている
Enter file in which to save the key (/Users/ユーザー名/.ssh/id_ed25519): /Users/ユーザー名/.ssh/id_ed25519_github

# SSHキーのパスフレーズ設定
Enter passphrase (empty for no passphrase): 任意のパスワードを入力

# パスフレーズの再確認
Enter same passphrase again: 再度パスワードを入力

 ↓　入力が完了すると、秘密鍵と公開鍵が生成される

Your identification has been saved in /Users/ユーザー名/.ssh/id_ed25519_github.
Your public key has been saved in /Users/ユーザー名/.ssh/id_ed25519_github.pub.

# 生成されたSSHキーの確認
% ls -al ~/.ssh

```

`参考まで：　RSA(4096bit)形式の作成`

```shell:ターミナル

# RSA4096ビット形式のSSHキーを作成する
# (メールアドレスはGitHubに登録しているものにする)
% ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

 ↓ 質問に答えていく
# SSHキーの保存先パスとファイル名を決める
#  -> そのままEnterと押すと()内がデフォルトとなる 
#    ※ 今回はGitHub用のために末尾を「_github」としている
Enter file in which to save the key (/Users/ユーザー名/.ssh/id_rsa): /Users/ユーザー名/.ssh/id_rsa_github

# SSHキーのパスフレーズ設定
Enter passphrase (empty for no passphrase): 任意のパスワードを入力

# パスフレーズの再確認
Enter same passphrase again: 再度パスワードを入力

 ↓　入力が完了すると、秘密鍵と公開鍵が生成される

Your identification has been saved in /Users/ユーザー名/.ssh/id_rsa_github.
Your public key has been saved in /Users/ユーザー名/.ssh/id_rsa_github.pub.

# 生成されたSSHキーの確認
% ls -al ~/.ssh

```

# 2. SSHキーをssh-agentに登録する



```shell:ターミナル

# バックグラウンドでssh-agentを起動する
% eval "$(ssh-agent -s)"

# VIMで.ssh/configを開いて設定しておく
% vi ~/.ssh/config 

　↓ 「i」キーを押してインサートモードに切り替えて追記

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

# 秘密鍵をssh-agentに登録
% ssh-add ~/.ssh/id_ed25519_github

```

# 3. GitHubにSSHキーを登録する

あとは、生成できた公開鍵のコードをコピーして
GitHub上にそのままペーストして登録する。


```shell:ターミナル

# 公開鍵をクリップボードにコピーする
% pbcopy < ~/.ssh/id_ed25519_github.pub

```

以降はGitHub画面でGUI操作で設定を行う

![スクリーンショット 2021-11-06 18.05.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1380401/a7b7df4c-9688-919a-71b2-b575afc7721e.png)


![スクリーンショット 2021-11-06 18.06.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1380401/3f0a1e91-36a5-b727-2589-392976a6b6a0.png)


![スクリーンショット 2021-11-06 18.03.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1380401/5b73cbbf-b3eb-0682-c89e-f76f70fdd080.png)


![スクリーンショット 2021-11-06 18.08.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1380401/43f3bfb2-bcbf-27e5-39f0-cf15733d92cf.png)



![スクリーンショット 2021-11-06 18.09.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1380401/5bdf880a-4b21-b91b-170e-d7e69b2a00ac.png)

以上で全ての作業が完了する。

# SSH通信の確認

```shell:ターミナル

# SSH通信の確認する
% ssh -T git@github.com

Hi ユーザー名! You've successfully authenticated, but GitHub does not provide shell access.

```

# 終わりに

2021年8月13日にGitHubがHTTPSのパスワード認証が廃止されたようですが
私の場合、git pushコマンドが通っていたのは何故なんでしょう…
(いまだにHTTPSで通ってしまう)

恐らく、初期設定した記憶が曖昧なんですが、MacOSなんで
下記ツールがパスワード管理していて上手く機能しているんですかね。

https://support.apple.com/ja-jp/guide/keychain-access/kyca1083/mac