[TIL] 1つのPCで複数のGitHubアカウントを使用

> 私は日本のLIFULL社で働いているエンジニアです。
> もし、内容の中で間違った表現や言葉などがあれば、書き込みをしてください。

# なぜ必要なのか？
- 最近、入社して研修を受けながら、個人アカウントと社内アカウントを分離するため頑張っています。
- GitHubのアカウントはどうすれば良いでしょう？という悩みがあったので、色々調べてみました。
- SSH Keyを生成してGitHubに適用すると、**個人アカウントと社内アカウント分離できる**ことを発見しました。

# [STEP 1] SSH Key 生成と登録

### 1. `ssh-key`の生成

1. `~/.ssh`フォルダーに移動
    - フォルダーはホームディレクトリーにある
    - もし、なかったら `mkdir ~/.ssh`でフォルダーを生成
    ```bash
    $ cd 
    $ cd ~/.ssh
    ```
2. `ssh-key`の生成
    - コマンド
        ```bash
        $ ssh-keygen -t {暗号化方式} -b {作成するキーのサイズ} -C "自分のメールアドレス"
        ```
        - 暗号化方式 : rsa
        - 作成するキーのサイズ : 4096 

    - 実コマンドの例
        ```bash
        $ ssh-keygen -t rsa -b 4096 -C "*****@gmail.com"
        ```
    - コマンドを実行すると下記のように出て、**ファイル名を入力**
        ```bash
        Generating public/private rsa key pair.
        Enter file in which to save the key (/Users/JeongJaeSoon/.ssh/id_rsa):
        ```
    - ただ、Enterを押すと`id_rsa`になるし、そうじゃないと**自分が入力した名前がファイル名**になる。
    私のPCには個人アカウントは`id_rsa_JeongJaeSoon`で、社内アカウントは`id_rsa_JaeSoonJeong_LIFULL`で設定した。
    - その後のパスワードはただEnterを押してパス
        ```bash
        Enter passphrase (empty for no passphrase):
        Enter same passphrase again:
        ```
    - 生成を成功したら、下記のように出る
        ```bash
        Your identification has been saved in id_rsa_JeongJaeSoon
        Your public key has been saved in id_rsa_JeongJaeSoon.pub
        The key fingerprint is:
        SHA256:sha256sha256sha256sha256sha256 *****@gmail.com
        The key's randomart image is:
        +---[RSA 4096]----+
        |       .+*SO=    |
        |         ..oM=.  |
        |        o. ==+ . |
        |       . Jan. .  |
        |      o G o      |
        |   o o + o .     |
        |  o o = * +      |
        |   o.. = G .     |
        |   oo .   d      |
        +----[SHA256]-----+
        ```
    - `ls`で生成結果を確認：1組のファイルが生成されたことが確認可能
        ```bash
        $ ls
        id_rsa_JeongJaeSoon            id_rsa_JeongJaeSoon.pub
        id_rsa_JaeSoonJeong＿LIFULL    id_rsa_JaeSoonJeong＿LIFULL.pub
        ```

### 2. `ssh-key`の登録

1. コマンド
    ```bash
    $ ssh-add {作成したssh-keyのパス}
    ```
2. 実コマンドの例
    ```bash
    $ ssh-add ~/.ssh/id_ras_JeongJaeSoon
    ```
3. 下記のように出ると成功
    ```bash
    Identity added: ./id_ras_JeongJaeSoon (*****@gmail.com)
    ```
4. もし、下記のようにエラーが発生すると`eval $(ssh-agent)`でssh-agentを再起動
    ```bash
    Could not open a connection to your authentication agent.
    ```

### 3. `ssh config`ファイル作成

1. **configファイル**はssh-keyを生成した`~/.ssh`に生成
    ```bash
    $ vi ~/.ssh/config
    ```
2. configファイルの内容は下記の通り
    - Host github.com-[アカウント名] : アカウント名はよく使われるので覚えやすい言葉にしてください。
    - 自分の環境や欲しい内容を考慮して、作成してください。
    ```bash
    # LIFULL GitHub Account
    Host github.com-lifull
        HostName github.com
        IdentityFile ~/.ssh/id_rsa_JaeSoonJeong_LIFULL
        User JaeSoonJeong
    # Private GitHub Account
    Host github.com-JeongJaeSoon
        HostName github.com
        IdentityFile ~/.ssh/id_rsa_JeongJaeSoon
        User JeongJaeSoon
    ```

# [STEP 2] SSH Key - GitHubアカウント連結設定

### 1. GitHub アカウントにSSH設定

- `.pub`ファイルの内容を確認し、GitHubのSSH keysに入力
    ```bash
    $ cat id_rsa_JeongJaeSoon.pub
    ssh-rsa RSAgabRSAgabRSAgabRSAgabRSAgabRSAgabRSAgabRSAgabRSAgabRSAgabRSAgabRSAgabRSAgabRSAgabRSAgabRSAgabRSAgab
    ```
- 詳細入力方法はこの[ドキュメント](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)を参考

### 2. 設定がきちんとできているか確認

1. コマンド
    ```bash
    $ ssh -T git@github.com-{3番で指定したgithub.com-[アカウント名]のアカウント名}
    ```
2. 実コマンドの例
    ```bash
    $ ssh -T git@github.com-lifull
    $ ssh -T git@github.com-JeongJaeSoon
    ```
3. 下記のようにメッセージが出ると`yes`を入力
    ```bash
    The authenticity of host 'github.com (191.1.128.65)' can't be established.
    RSA key fingerprint is SHA256:sha256sha256sha256sha256sha256sha256sha256sha256
    This key is not known by any other names
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    ```
4. 連結が完了すると、成功メッセージが出力
    ```bash
    Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
    Hi JeongJaeSoon! You've successfully authenticated, but GitHub does not provide shell access.
    ```

# [STEP 3] `ssh-key`を活用して、GitHubリポジトリに連結

1. GitHubで`git-test`という名前のリモートリポジトリを生成
2. リポジトリのURLをHTTPSではなくSSHでコピー：`git@github.com:JeongJaeSoon/git-test.git`
3. 3番で指定した`github.com-[アカウント名]`の**アカウント名**を追加して`git clone`を実行
    ```bash
    $ git clone git@github.com-JeongJaeSoon:JeongJaeSoon/git-test.git
    ```
4. クローンされたローカルリポジトリに移動して、**local config アカウント**を設定
    ```bash
    $ git config --local user.name "JeongJaeSoon"
    $ git config --local user.mail "wjdwont1006@gmail.com"
    ```
    - 私の場合はよく使うアカウントが社内アカウントになると思ったので`--global`には社内アカウント、
    個人勉強・プロジェクトには個人アカウントを`--local`に登録しておいた。