GithubとSourceTreeの二段階認証の方法

# 背景
今まで各個人のGitHubアカウントを使用していましたが、会社でまとめてGitHubアカウントを購入しようということになりました。
GitHub EnterPriseを購入した結果、SourceTreeで出来ていたプッシュやフェッチなど全ての操作が出来なくなりました。
どうやら色々調べた結果、認証方法が二段階認証に変更になったことが原因らしい。
SourceTreeで二段階認証を行うためにはどうすればいいかを試行錯誤し、実際に行った結果をまとめます。

# 前提
この作業を行った時点のSourceTreeのバージョンは「3.4.9.0」でした。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/62b52b53-16bd-d07d-6e19-64e26bb74edb.png" width="70%">

# 目次
- [手順](#手順)
    - [1. SourceTreeでの作成](#1-sourcetreeでの作成)
        - [1. 公開鍵と秘密鍵を作成する](#1-公開鍵と秘密鍵を作成する)
        - [2. configファイルの作成](#2-configファイルの作成)
    - [2. GitHubでの登録](#2-githubでの登録)
        - [1. 公開鍵の登録](#1-公開鍵の登録)
    - [3. SourceTreeでの設定](#3-sourcetreeでの設定)
        - [1. RepositoryのURLを変更する](#1-repositoryのurlを変更する)
        - [2. PuTTy/Pliknキーを作成する](#2-puttypliknキーを作成する)
    - [4. コマンドプロンプト実行](#4-コマンドプロンプト実行)
        - [1. plink.exeの登録](#1-plinkexeの登録)
    - [5. SoureTreeの再起動](#5-souretreeの再起動)
        - [1. パスワード入力欄の起動](#1-パスワード入力欄の起動)
- [参考URL](#参考url)

# 手順
## 1. SourceTreeでの作成
#### 1. 公開鍵と秘密鍵を作成する
1. ターミナルを開く
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/e99fe8d0-f3ec-1014-70f5-578282b70616.png" width="60%">

2. 以下のコマンドを実行する
    ``` cmd
    ssh-keygen -t rsa -C [コメント(メールアドレスとか何でも良い、空でも良い)]
    ```

3. 保存場所を聞かれるので問題なければEnter
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/2189fa27-c8c1-b21b-8ccb-e7bc6dc74bb1.png" width="70%">

4. パスワードを2回入力する　<font color='red'>**※必ず覚えておくこと**</font>
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/e1f7cf5f-4b34-4e9a-402d-f271a1fb7223.png" width="70%">

5. 3の保存場所に公開鍵、秘密鍵が作成される
    ・id_rsa　　　：　秘密鍵
    ・id_rsa.pub　：　公開鍵
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/5bf9466b-9242-09c3-7802-b4ff934b6ad7.png" width="30%">


6. 秘密鍵のアクセス権を設定する
    cd～は公開鍵/秘密鍵フォルダに移動するためのコマンドなので、
    既に移動している場合は不要
    ```
    cd ~/.ssh　
    chmod 600 id_rsa
    ```

#### 2. configファイルの作成
1. 以下のコマンドを実行する
    ssh-agentに鍵を登録しないと、SourceTreeが正常に鍵情報を読み込んでくれない模様
    ```
    eval `ssh-agent`
    ssh-add ~/.ssh/id_rsa
    ```

2. configファイルを作成する
    ```
    touch config
    ```

3. 2のconfigファイルをテキストファイルで開き、以下を記載する
```
Host github.com
  HostName github.com
  IdentityFile ~/.ssh/id_rsa
  User git
```

## 2. GitHubでの登録
#### 1. 公開鍵の登録
1. ユーザーの「Settings」をクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/c92943fd-b241-c077-6f3c-0972a92caa08.png" width="30%">

2. 「SSH and GPG keys」をクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/947a5759-faa2-a887-b063-088fe3231250.png" width="40%">

3. 「New SSH key」をクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/2e81f360-c0a5-4f2c-854f-597c9170728d.png" width="90%">

4. 「Title」と「Key」を入力し、「Add SSH key」をクリックする
    ・Title　：　任意のタイトル
    ・Key  　：「id_rsa.pub」（公開鍵）の内容をコピペする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/5ecb26bb-a538-cca3-e137-5a50f7056cfc.png" width="90%">

5. 作成した鍵の「Configure SSO」をクリックし、「Authorize」ボタンをクリックする
    「Authorize」を既に行っている場合、「Deauthorize」になる
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/8b1af1cc-40bf-98f4-93cd-39a90a937a6e.png" width="90%">


## 3. SourceTreeでの設定
#### 1. RepositoryのURLを変更する
1. 「設定」をクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/4b4b068f-1c5c-b588-4931-5cad3dfd74c9.png" width="60%">

2. 変更したいRepositoryをクリックし、「編集」ボタンをクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/70bab645-304a-614e-708c-a5f830224344.png" width="70%">

3. GitHubで対象のRepositoryを開き、SSHのURLをコピーする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/800e73cc-b1a2-b687-62fd-e0e0d0c239c4.png" width="100%">

4. 3でコピーしたURLをペーストし、OKボタンをクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/c11b02fc-e95d-b0e3-15fb-cbeece2f700e.png" width="70%">

#### 2. PuTTy/Pliknキーを作成する
1. 「ツール」⇒「オプション」をクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/aaa0b74e-bdef-ca90-4829-cb71869438d5.png" width="70%">

2. SSHクライアントを「PuTTY/Plink」に変更して、「OK」ボタンをクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/0caa5bff-e8a3-a702-ee15-6117671b0d7f.png" width="90%">

3. 「ツール」⇒「SSHキーの作成/インポート」をクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/6b6eb1f3-ae59-ebb4-bc1c-90ac1d789fc1.png" width="70%">

4. 「Load」ボタンをクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/ffe0abaa-7541-110f-140e-c573192dc4ff.png" width="90%">

5. 「All Files」を選択後、「id_rsa」を選択し、「開く」ボタンをクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/15b687fb-e04f-d0cb-de5e-c76d977477ff.png" width="100%">

6. 秘密鍵のパスワードを入力する
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/cf3ba0b2-67cb-9776-9146-5ea46a105a1e.png" width="50%">

7. 「OK」ボタンをクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/151e49d9-b706-5634-c1e3-9f4e3a978e27.png" width="70%">

8. 「Save private key」ボタンをクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/9823daa6-642f-d2ca-f388-cb24bb9e65ea.png" width="90%">

9. 任意のファイル名をつけて「保存」ボタンをクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/2b5c8d19-606e-a515-8dd7-bb7303c72889.png" width="100%">

10. 「ツール」⇒「SSHエージェントを起動…」をクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/b4c1cad7-9978-0343-8e6f-7f85fc5c3e97.png" width="70%">

11. 「OK」ボタンをクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/a9f8f8fd-f4d7-d741-5641-26ffb74e47a0.png" width="70%">

12. 右下のツールバーから「SSHエージェント」をダブルクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/318453aa-8fc2-1121-f417-c21fe2415dc5.png" width="70%">

13. 「Add Key」ボタンをクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/bf6ab634-18e0-5ff0-bfe4-370478a61892.png" width="90%">

14. 9で作成したファイルを選択し、「開く」ボタンをクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/1af6d014-0319-6584-d1bc-367c7bd03daf.png" width="100%">

    :::note warn 
    以下のエラーが発生した場合
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/3e044391-81d7-8339-6292-f798e11a970d.png" width="60%">
    　
    以下の設定をした状態で手順4に戻り、PuTTY用の公開鍵を作成する
    1. Parameters for saving key files」をクリックする
        <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/f791b84e-faec-0e75-de8c-9cfe9f8dd776.png" width="90%">
        
    2. 「PPL file version」で「2」を選択し、「OK」ボタンをクリックする
        <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/6dfa41e1-0ebb-4c34-6095-6708c5bd4f19.png" width="70%">

    3. 「Load」ボタンをクリックする】から再度行う
    :::

15. キーが追加されたことを確認し、画面を閉じる
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/8ea3f185-8b9a-9643-5b84-90e56dfcacaf.png" width="90%">

16. 「ツール」⇒「オプション」をクリックする
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/24ce399d-683e-5bf1-23ab-acba5cf46b80.png" width="70%">

17. 「SSHクライアントの設定」を確認する
　・SSHキー
    　　⇒　9で作成したファイルを選択する
　・SSHクライアント
    　　⇒　PuTTY/Plinkを選択する
　<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/6c2b1dbc-276e-b522-2af8-89018214de84.png" width="90%">

## 4. コマンドプロンプト実行
#### 1. plink.exeの登録
1. コマンドプロンプトを起動する

2. 以下のコマンドを入力する
    ```
    "C:\Users\XXXXXXXX\AppData\Local\SourceTree\app-3.4.9\tools\putty\plink.exe" -ssh -C -i "C:\Users\XXXXXXXX\.ssh\id_rsa.ppk" git@github.com
    ```

    ・C:\Users\XXXXXXXX\AppData\Local\SourceTree\app-3.4.9\tools\putty\plink.exe
    　⇒　plink.exeのファイルパスを設定する
    ・path\to\private\key.ppk
   　 ⇒　【3-2. PuTTy/Pliknキーを作成する】で作成した「.ppk」のファイルパスを設定する

3. 下記メッセージが表示された場合は「y」を入力する
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/3d948a71-0540-b84d-2367-423565d01ff2.png" width="70%">

4. 下記メッセージが表示されれば登録完了
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/7062e801-4a10-b452-fc3f-be039e6b172b.png" width="90%">

## 5. SoureTreeの再起動
#### 1. パスワード入力欄の起動
1. SourceTreeも再起動する
   2のパスワード入力欄が表示されないようであればPCを再起動する

2. SoureTreeを起動した際、以下のパスワード入力欄が表示されれば問題なし
　<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2847634/794ab118-ccf6-8037-92d0-b337d1b36f74.png" width="50%">

# 参考URL
- [SourceTreeでGitHubにSSH接続する方法](https://qiita.com/evitch/items/5d87b8aab5cd72695d2b)
- [~/.ssh/configを使ってSSH接続を楽にする](https://tech-blog.rakus.co.jp/entry/20210512/ssh)
- [【解決】SourceTreeの「SSHエージェントを起動」ができない	](https://orefuan.blogspot.com/2021/09/sourcetreessh.html)
- [SourceTreeでGithubの認証に秘密鍵を使う (Windows)	](https://qiita.com/reflet/items/4f7b5c4a312bc27df10e)
- [Windows の SourceTree で GitHub から fetch/push ができなかった](https://qiita.com/chatii0079/items/17f8a79808e35f1ad225)