複数のGithubアカウントをSourceTreeに設定したい[macOS]

# 前提と目的

仕事用とプライベートのGithubアカウントそれぞれを使い分けたい
SSHを複数作って両方に登録したけど
どちらかのアカウントのクローンしようとすると
有効なアドレスではないと怒られた

これを解決することができたので
問題が起こってた原因と対処方法を備忘録として記録

# 環境

- MacBook Pro (Retina, 13-inch, Early 2015)
- macOS Mojava 10.14.6
- Sourcetree 4.0.2

# 参考

- GitHubを複数のアカウントで利用するためのメモ  
https://qiita.com/BlueEventHorizon/items/f9d81e3659ebce9e1ffc
- ファイル名を指定してssh認証鍵を作成する  
https://qiita.com/TanakanoAnchan/items/0b9b5e0b80aa86d324f5
- お前らのSSH Keysの作り方は間違っている  
https://qiita.com/suthio/items/2760e4cff0e185fe2db9
- GitHub+SourceTreeで複数アカウント設定  
https://blog.tanebox.com/archives/6/

# 要点

1. SourcetreeからSSHクローンする時「git@github.com」を「git@[Host名]」にしてなかった
2. キーチェーンに以前使ってた情報が保存されてしまっていた 

# 設定手順

1. SSHKeyを二種類作成
1. SSHKeyをそれぞれのGithubに登録
1. ./ssh/configにHost名を変えて設定
1. git@での接続を有効化
1. SourcetreeからSSHクローンする時「git@github.com」を「git@[Host名]」にする

## [1] .SSHKeyを二種類作成

2種類のSSHKeyを作成
名前はなんでも良い。例として以下の通り。

- id_work_rsa： 仕事用
- id_private_rsa： プライベート用

ターミナルを開いて以下の手順で作成

```
# ./sshディレクトリに移動
cd ~/.ssh

# SSHkey作成（仕事用 id_work_rsa）
ssh-keygen -t rsa -f id_work_rsa -b 4096 -C [あなたのGitHubアカウントメールアドレス]

# パスフレーズを入力（パスフレーズは覚えておく）
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):

# もう一度同じパスフレーズを入力
Enter same passphrase again:

# 以下色々表示されるけどこれで終わり
Your identification has been saved in id_work_rsa.
Your public key has been saved in id_work_rsa.pub.

# SSHkey作成（プライベート用 id_private_rsa）
ssh-keygen -t rsa -f id_private_rsa -b 4096 -C [あなたのGitHubアカウントメールアドレス]

# 以下仕事用の手順と同じ
```

これで./sshディレクトリには
以下の通りにファイルが作られている

```
config
id_work_rsa
id_work_rsa.pub
id_private_rsa
id_private_rsa.pub
known_hosts
```

## [2] .SSHKeyをそれぞれのGithubに登録

仕事用とプライベート用のアカウントに
それぞれのためのポートを登録

1. Setting > SSH and GPG keys を開く
2. SSH keysの「New SSH Keys」をクリック
3. Titleは自由、わかりやすくKey作成時のメールアドレスなど
4. Keyは作成した公開鍵をターミナルでコピーして貼り付け
5. 「Add SSH Keys」で登録完了

ターミナルでコピーする方法

```
# id_private_rsaの時も同じようにコピー
pbcopy < ~/.ssh/id_work_rsa.pub 
```

## [3] ./ssh/configにHost名を変えて設定

./ssh/configを開いて以下のように入力し保存
configがなければ作成

```
Host github-private
  User git
  Port 22
  HostName github.com
  IdentityFile ~/.ssh/id_private_rsa
  TCPKeepAlive yes
  IdentitiesOnly yes
  UseKeychain yes
  AddKeysToAgent yes

Host github-work
  User git
  Port 22
  HostName github.com
  IdentityFile ~/.ssh/id_work_rsa
  TCPKeepAlive yes
  IdentitiesOnly yes
  UseKeychain yes
  AddKeysToAgent yes
```
※ ポートの22はGitのSSH接続する時のポート番号
https://docs.github.com/ja/enterprise/2.19/admin/configuration/network-ports#エンドユーザーのためのアプリケーションポート



## [4] git@での接続を有効化

登録したHostでSSH接続できるようにします
以下のコマンドを入力

```
ssh -T git@github-private
```

「fingerprints」に記載されているpublic keyと同じか確認して「yes」と入力Enter
https://docs.github.com/en/github/authenticating-to-github/githubs-ssh-key-fingerprints

```
The authenticity of host 'github.com (13.114.40.48)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])
```

以下の文言が出れば接続が成功
github-workも同じ手順で接続

``` 
Hi [あなたのGitUser名]! You've successfully authenticated, but GitHub does not provide shell access.
```

## [5] SourcetreeからSSHクローン

Sourcetreeの「新規 > URLからクローン」する時
入力するソースURLの「git@github.com」を「git@[Host名]」にする

例）
ソースURL（SSH)： git@github.com:[ユーザー名]/[リポジトリ名].git

仕事用 → git@github-work:[ユーザー名]/[リポジトリ名].git
プライベート用 → git@github-private:[ユーザー名]/[リポジトリ名].git

URLを入力するとパスフレーズを求められるので
SSHKeyを作成した時に設定したパスフレーズをそれぞれ入力する
これで両方のGitHubアカウントのSSHでのプルやプッシュが行えるようになる

**※ パスフレーズを求められなかった場合**

MACユーザーの場合キーチェーンにすでに
別のSSHのパスフレーズが登録されている可能性がある
その場合一度キーチェーンから削除する必要がある

「アプリケーション > キーチェーンアクセス」を起動して「GitHub」で検索

- github.com Access Key for [ユーザー名]
- github-private Access Key for [ユーザー名]

おそらく先にGit連携すると「github.com Access Key」で登録されてるはずなので
以前SourceTreeでSSHKeyを使った接続をしてた人は
この前に使ってたキーチェーンを削除

再度URLからクローンしようとすると
パスフレーズを要求されるはずなので、先の手順通り登録して完了