SourceTreeからSSHでGitHubに接続する

## 前置き
2021年8月13日をもってGitHubではパスワード認証が廃止され、個人アクセストークンかSSHでの認証へと移行されました。 
=> https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/

それに伴いSourceTreeでクローンしていたリポジトリにも接続できなくなっていたので、
GitHubにSSHを設定しSourceTreeと連携させた手順を記します。

## 実行環境
- MacOS Catalina v10.15.7
- Source Tree v4.1.1

## SSH Keyの作成

### SSH Key作成コマンド

下記コマンドを叩いてSSH Key作成を開始します。

```zsh
% ssh-keygen -t rsa -b 4069 -C "github_email_address"
```

- -t: 暗号化方式 rsa公開鍵暗号方式を指定
- -b: 暗号化強度 鍵長4069を指定
- -C: コメント GitHub登録のメアドを指定(自由です)


### パスワード設定

続いてパスワードを設定します。
設定しない場合は空のままEnterを叩けばOKです。

```zsh
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/user_name/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): # パスワードを設定
Enter same passphrase again: # パスワード再入力
```

### SSH Key出力

問題なく処理が完了すれば、生成されたSSH Keyの出力情報が表示されます。
初めて作成する場合は`id_rsa`と`id_rsa_pub`という名前で生成されます。
ここで生成された秘密鍵(`id_rsa`)は自分以外には漏らさないように厳重に管理してください。

```zsh
Your identification has been saved in /Users/user_name/.ssh/id_rsa. # 作成された秘密鍵
Your public key has been saved in /Users/user_name/.ssh/id_rsa.pub. # 作成された公開鍵

The key fingerprint is:
SHA256: github_email_address
The key's randomart image is:
+---[RSA 4069]----+
|        略       |
+----[SHA256]-----+
```

## GitHubへSSH Keyを登録

1. GitHubへログインし、 Settings → SSH and GPG keys → New SSH Key を選択
2. Titleに識別用の名前をつける (今回はMacBookと名付けました)
3. Bodyに先程作成した公開鍵(id_rsa.pub)の中身をペースト
4. Add Keyを選択し登録

登録が完了すると以下のような表示になります。

![ssh_key_added.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283305/a24eaf1d-3440-e2cb-d7a3-dc80660f9adf.png)

## SSH Config設定

GitHub接続へ利用するSSH Keyの設定を行う。

1. vimで `~/.ssh/config`を開く
2. GitHub接続用情報を追加し、`IdentityFile`の欄に作成した秘密鍵を指定し上書き保存  

```name:~/.ssh/config
# --- GitHub ---
Host github
  HostName github.com
  IdentityFile ~/.ssh/id_rsa
  User git
# ---------------------------
```

3. 所有者にのみ読み書き権限を付与するため、 `chmod 600 ~/.ssh/config` を実行

## 秘密鍵をssh-agentへ登録

ssh-agentとは、RSA方式での認証を用いてSSH接続を行う際、秘密鍵に設定しているパスワードの入力を自動で行う機能です。  

1. `eval "$(ssh-agent -s)"` を叩き、Agent pidが表示されればssh-agentの起動OK
2. `ssh-add ~/.ssh/id_rsa(秘密鍵)` を叩き、秘密鍵に設定しているパスワードを入力
3. `ssh-add -l` で登録されている秘密鍵を確認し、追加したものが表示されればOK

## SSH疎通確認

登録した公開鍵と秘密鍵を用いてGitHubへの疎通確認をします。  

1. ターミナルにて　`ssh -T git@github.com` を実行
2. 表示されるfingerprintが [GitHub's SSH key fingerprints](https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/githubs-ssh-key-fingerprints) に記載のものと一致するか確認し`yes`を叩く
3. `Hi username! You've successfully authenticated, but GitHub does not provide shell access.` と表示されれば疎通確認OK 

## Source Treeに紐付け

Source Tree側でプロフィール設定を行い、SSH接続を用いるようにします。

1. 環境設定 → ユーザー選択(なければ作成) → 編集 でユーザーの編集設定を開く
2. 認証タイプをOAuth、プロトコルをSSHにし、SSHキーに作成した公開鍵(id_rsa.pub)が設定されていることを確認  
![sourceTree.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283305/877f5a46-da6c-5675-0f78-ef4c22ccf575.png)
3. 保存をクリックするとGitHubが開かれて鍵が照合され、問題なければ再びSource Treeが開かれる
4. GitHubのリポジトリページにて、CodeからSSH接続用のURLをコピーしてSouce Treeでクローンし直す
(既存のクローン済みリポジトリもSSHでクローンし直す必要がありそう)  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283305/c2eaf8cd-7ea3-5835-b712-22a0a7474bf3.png)

## 終わりに

まだまだ勉強中の身ですので、
間違いやタイポ、不適切な表現がありましたらご指摘頂けると幸いです。