【備忘録】1Passwordでの複数Githubアカウント利用時のSSHキー管理方法

# はじめに
1PasswordのSSHエージェント機能により、GitHubのSSHキー管理ができるようになりました。
かなり便利なため最近使い始めたのですが、仕事用/プライベート用といった**複数のGitHubアカウントを利用する場合**の設定方法に少しつまづいたため、設定手順を備忘録として残しておきます。

- MacOS環境での設定手順
- 執筆時点（2022/5/1）では、1PasswordのSSHエージェント機能はベータ版のみの提供

# 1Passwordのインストール、単一アカウントのSSHキー設定手順

インストールと**単一の**GitHubアカウント（メインアカウント）使用時の設定は以下クラメソさんの記事がわかりやすいため、こちらを参考にしてもらえると良いと思います。
[Github等で利用するSSH keyの作成及び管理を1Passwordで行う](https://dev.classmethod.jp/articles/1password-git-ssh/)


今回はメインGitHubアカウントにSSHキーに```Github-main```を登録しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577028/41c22001-a3cc-5ae5-e7e8-2c8992276189.png)


この状態でメインアカウントのリポジトリにGit操作（clone等）しようとすると、TouchID認証画面が表示されます。
先ほど作ったSSHキー```Github-main```を利用している事がわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577028/de31f0e8-c1c1-512c-ef9d-0827004494c2.png)


# サブアカウントのSSHキー設定手順
ここからが本題です。
**2個目のGitHubアカウント（サブアカウント）** も利用する場合、サブアカウントのGitHub設定に新規のSSHキー（公開鍵）を登録する必要があります。
※ 登録するSSHキーは一意である必要があるため、メインアカウントに登録したキーをサブアカウントでも使い回すことはできません。

手順は以下です。

### 1. SSHキーの登録
ここは普通に1Passwordでキー新規作成し、登録してOKです。
↓GitHubのSSHキー登録画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577028/584d9aaa-1713-7be0-7820-8af4504b2884.png)

### 2. 認証失敗例
この状態でそのままサブアカウントのリポジトリをgit clone等すると、**1Passwordはサブアカウントのキー```Github-sub```ではなく、最初に登録したメインアカウントのキー```Github-main```を使おうとしてしまい、当然認証エラーになります。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577028/de31f0e8-c1c1-512c-ef9d-0827004494c2.png)
下記のようなエラーが出ます。

```
ERROR: Repository not found.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
```

### 3. 回避方法
1. 1Password管理のSSH公開鍵（サブアカウント用）をローカルにダウンロードします。ここが肝。
1PasswordのサブアカウントSSHキー画面で [public key] 右タブ → [Download] 押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577028/9f72e82b-dd87-07aa-12c6-23764be32532.png)

ローカルにダウンロードされたSSHキーを```~/.ssh/```に移動し任意の名前で保存（今回は```id_subgit.pub```）
```
$ mv ~/Downloads/id_ed25519.pub ~/.ssh/id_subgit.pub
```

あとは、1Passwordを使わない場合の複数Githubアカウント使用時と同じオペレーションです。
```~/.ssh/config```にサブアカウント用ホストを追記します。

```
Host github.com.sub # ホスト名は末尾に「sub」つける等わかりやすく記述
  HostName github.com
  IdentityFile ~/.ssh/id_subgit.pub # 先ほどのキーを記述
  IdentitiesOnly yes
  User git
```
次に実際の操作時。
サブアカウントのリポジトリに対してGit操作したい場合は、ホスト名を`git@github.com`ではなく、上記で設定したホスト名にします。
今回は、`git@github.com`の後に```.sub```をつければOK。

```
$ git clone git@github.com.sub:<your_account_name>/<repository_name>.git
```
すると、今度はサブアカウント用のSSHキー``Github-sub``で1Passwordが認証してくれるようになりました！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577028/5c42d122-9cf6-bf3f-01d8-af5e8feb33b1.png)

上記でcloneしたらあとはremote-urlのホスト名がサブアカウント用になっているため、こちらで意識せずとも1Passwordがサブアカウント用のSSHキーを使って認証してくれるようになります。（もちろん、デフォルトのホスト名でremote-url設定されている、メインアカウントのリポジトリに対してはメイン用のSSHキー```Github-main```を使ってくれます。）

もし、既存のローカルリポジトリにサブアカウント用SSHキー認証を反映させたい場合は、以下のようにリモートURL設定しなおせばOKです。
```
$ git remote set-url origin git@github.com.sub:<your_account_name>/<repository_name>.git
```

# まとめ
- 複数Githubアカウントを利用する場合は、２個目以降のアカウント用SSH公開鍵はローカルに保存しておく必要がありConfig設定も必要なため、1PasswordによってローカルでのSSHキー管理から完全に解放されるわけでないです。
- それでも、**キー全体は1Password側で保管されるため端末を変えても簡単にキーを引き継げる**ことには変わりないし、**秘密鍵はローカルに保存不要なためセキュリティ面ではより安全になった**といえます。
- 1Password最高！！


# 参考
- [1Password管理SSHキーのホスト設定手順](https://developer.1password.com/docs/ssh/agent/advanced/#match-key-with-host)
- [Github等で利用するSSH keyの作成及び管理を1Passwordで行う](https://dev.classmethod.jp/articles/1password-git-ssh/)
- [[備忘] 複数Githubアカウントでssh接続設定(config)を使い分ける手順](https://qiita.com/yampy/items/24638156abd383e08758)
- [gitのremote urlを変更する(レポジトリ移行時)](https://qiita.com/minoringo/items/917e325892733e0d606e)