SourceTreeを使って複数アカウントでGitHubにSSH接続する方法

複数のSSHキーのうち、どのキーでGithubに接続するかの設定は/.sshのconfigファイルに記述するが、SourceTreeにSSHキーを読み込ませるには、SSHキーのファイル名に気をつけないと読み込んでくれない模様。

OS：Mac OS Big Sur
SourceTree：バージョン4.1.3

結論、SSHキーのファイル名は、**『ユーザー名-GitHub』、『ユーザー名-GitHub.pub』**とする。

## 既存のアカウントのSSHキーのファイル名を確認
ターミナルでSSHキーを生成する際、ファイル名を指定しないと、『id_rsa.pub』というファイル名でキーファイルが作られるが、このファイル名だとSourceTreeで複数アカウントの登録ができなかった。また、configファイルで新しいキーファイルを指定しても、うまく読み取ってくれないことがあるため、既存のアカウントのキーファイル名が『ユーザー名-GitHub.pub』となっていることを確認する。

『ユーザー名-GitHub.pub』になっていない場合は、変更し、configファイルを修正する。下記の[configファイルの編集](#configファイルの編集)を参照。

## SourceTreeでアカウント作成
まず、デフォルトのブラウザで、新しく登録するアカウントでGitHubにログインしておく。

環境設定＞アカウントを開き、追加。
![sourcetree1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2027088/fa52606c-9d66-0e98-ab6e-d3c6e294d9b7.png)

ホスト：GitHub
認証タイプ：OAuth
プロトコル：SSH
を選択して、「アカウント接続」をクリック。
![sourcetree2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2027088/2010ebb3-d1f4-baa8-1692-287d1a90480d.png)
GitHubにSourceTreeへの連携の許可を聞かれるので、許可すると、ユーザー名に新しいアカウントが出てくる。
![sourcetree3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2027088/4fccc16e-f9e7-431b-2d6d-6196ef4d76a1.png)

今回は、ユーザー名：nisogainというアカウントを追加したので、SSHキーの生成の際には、ファイル名は『nisogain-GitHub』とする。
SSHキーの生成はターミナルで行う。

## SSHキーの設定
### ターミナルでSSHキー作成
ターミナルで下記ディレクトリへ移動。

```
cd ~/.ssh
```

SSHキーの生成。（ファイル名は『ユーザー名-GitHub』）

```
ssh-keygen -t rsa
```

公開鍵の中身をコピー。（ファイル名は『ユーザー名-GitHub.pub』）

```
pbcopy < ~/.ssh/ユーザー名-GitHub.pub 
```

### GitHubへ公開鍵の登録
新しく登録するアカウントでGitHubにログインする。
『Settings』の『SSH and GPG keys』へ。
「New SSH key」をクリック。
![sourcetree6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2027088/b8fb0987-64a1-346e-6833-bbe04f8d1864.png)

任意のTitleを入力し、さきほど　コピーした公開鍵をペーストし、保存。
![sourcetree7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2027088/1a990e0e-9482-7e69-8854-351cf7369677.png)

### configファイルの編集
まだconfigファイルがない場合は、新しく作成。

```
touch ~/.ssh/config
```

新しいアカウントでどのキーファイルを使用するかをconfigファイルに追記する。
（既存のアカウントについても、どのキーファイルを使用するかを記述していなかった場合は、記述する。）

新しく追加するアカウントのHostは、『github.com.sub』のように変更する必要あり。

```
# 既存のアカウント
Host github.com
	HostName github.com
	User git
	PreferredAuthentications publickey
	IdentityFile ~/.ssh/既存ユーザー名-GitHub
	IdentitiesOnly yes
	UseKeychain yes
	AddKeysToAgent yes

# 新しいアカウント
Host github.com.sub
	HostName github.com
	User git
	PreferredAuthentications publickey
	IdentityFile ~/.ssh/新規ユーザー名-GitHub
	IdentitiesOnly yes
	UseKeychain yes
	AddKeysToAgent yes
```

## SourceeTree、ターミナルどちらもGitHubに接続できているかを確認
### SourceTreeで接続を確認
新しく作成したアカウントの編集画面を開くと、SSHキーが表示されている。
![sourcetree8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2027088/8125d371-13f4-5d59-e1e1-b238de8c6c35.png)

対象のアカウントでリモートリポジトリからクローンできるか試してみる。
クローンする際はURLの設定に気をつける。下記の[リモートリポジトリをクローン](#リモートリポジトリをクローン)を参照。

### ターミナルで接続を確認
Hostは、『github.com.sub』とconfigに記述したので、下記のコマンドで接続の確認をする。

```
ssh -T github.com.sub
```

下記のように返ってくれば完了

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

### リモートリポジトリをクローン
SouceTreeでクローンする場合も、下記と同様にURLを変更してあげる。

gitコマンドでクローンしてから、SourceTreeで新規でディレクトリをスキャンしてあげるほうが楽なので、ターミナルでクローンする。

GitHubでSSH接続するリモートリポジトリのURLを確認する。
![sourcetree9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2027088/5941f6c8-8676-dbc4-17f4-67b40f47c85c.png)

『github.com』の部分をconfigで設定したHostに変更して、クローンする。

```
git clone git@github.com.sub:ユーザー名/リポジトリ名.git
```

下記コマンドで、今いるディレクトリがどのリモートリポジトリに接続されているかが確認できる。

```
git ls-remote
```

既存のアカウントで作成済みのローカルリポジトリのディレクトリへ移動して、```git ls-remote```してリモートリポジトリに接続されていることが確認できた。