【備忘録】1つのPCで複数のGitHubアカウントをディレクトリごとに使い分ける方法

個人用のGitHubアカウントと学校用(仕事用)のGitHubアカウントを使用して，同一PCからディレクトリごとにアカウントを管理したいときに困ったので，備忘録的に記します．<br>
・下の方法で出来ましたが，再現性があるかはわかりません...
 ・2つのGitHubアカウントが存在することが前提です．
 ※ ``$``以下の部分だけターミナルに打ち込んでください．
 </br>

### 1. アカウント1の鍵を登録
まず，作業ディレクトリに移動します．
```
$ cd
$ cd .ssh
```
それぞれのGitHubのアカウントごとに公開鍵と秘密鍵を生成します．
```
$ ssh-keygen -t rsa
```
すると，下のように文章が一行ごとに出力されます．
```
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):id_rsa #任意のファイル名を設定
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```
`Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):`
の時に，任意のファイル名を指定してください．何も入力せずにEnterを押すと，自動的にid_rsaというファイル名になります．2つ目のアカウントの鍵を生成するときに何も入力せずにEnterを押すと，同じファイル名のため内容が上書きされてしますうので注意して下さい．
3行目からはパスフレーズの入力が求められていますが，こだわりが無ければ何も入力せずにEnterを押して大丈夫です．<br>

```
$ ls
```
上のコマンドを入力すると下のような出力になっていることが確認できます．
id_rsaが秘密鍵で，id_rsa.pubが公開鍵です．
```
id_rsa id_rsa.pub known_hosts
```
### 2. アカウント2の鍵の登録
同様の手順で2つ目のアカウントの鍵を登録していきます．
```
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):id_rsa_sub #任意のファイル名を設定
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```
```
$ ls .ssh
id_rsa id_rsa.pub id_rsa_sub id_rsa_sub.pub known_hosts
```
### 3. GitHubに公開鍵を登録
生成した公開鍵をGitHubに登録します．<br>
**まず，アカウント1の鍵を登録します．**
下のコマンドを入力すると，公開鍵がターミナルに出力されます．
```
$ cat ~/.ssh/id_rsa.pub 
```
出力を全てコピーしてください．
次に，アカウント1のGitHubアカウントに移動してください．
<INS> 右上のアイコンをクリック> Settings > SSH and GPG keys </INS>
の順で移動して，右上のNew SSH key の緑のボタンをクリックしてください．
すると，下の画像のような画面に遷移するので，Titleに好きなタイトルをつけて，Keyに先ほどコピーした公開鍵をペーストします．最後にAdd SSH keyを押して，登録完了です．
![スクリーンショット 2024-09-27 141957.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621461/21ac6f05-4fc3-d189-03c8-9dfdfe086b77.png)

**同様の手順でアカウント2にも公開鍵を登録してください．**
```
$ cat ~/.ssh/id_rsa_sub.pub 
```
## 4. PCに設定を登録する．
ディレクトリを移動して，**Config**設定ファイルを作成し，編集画面に遷移します．
```
$ cd
$ cd .ssh
$ touch config
$ vi config
```
キーボードの``i``を押して，編集モードにしたら，下のように書きます．
```
Host Main
  HostName github.com
  User main
  IdentityFile ~/.ssh/id_rsa
  User git
  TCPKeepAlive yes
  IdentitiesOnly yes

Host Sub
  HostName github.com
  User sub
  IdentityFile ~/.ssh/id_rsa_sub
  User git
  TCPKeepAlive yes
  IdentitiesOnly yes

```
Hostには任意の名前(なんでもいい)をつけて，IdentityFileには自分が設定した鍵ファイルの名前を入力してください．``~/.ssh/任意の鍵ファイル名``
編集が完了したら，キーボードの``Est``を押して，``:wq``と入力して編集を終了してください．
<br>
◎ 任意の鍵ファイル名は下のコマンドで確認できます．
```
$ ls
```

## 5. GitHubとPCの接続確認(注：ここから再現性が微妙です)
基本的には，アカウント1(main)になっているはずなので，アカウント2(Sub)と接続したいディレクトリまで移動してください．
```
$ cd 任意のファイル名
```
そのディレクトリに登録されているGitHubのアカウント名とユーザー名を確認してください．
```
$ git config user.name
$ git config user.email
```
自分が接続したいアカウントと違っていたら，変更してください．
```
$ git config user.name "GitHubのアカウント名を入力"
$ git config user.email "GitHubに登録したメールアドレスを入力"
```
再度名前とメールが合っているか確認してください．
※ `git config --global`というオプションをつけるとPC全体の設定が変更できます．

次に，リモート接続ができている確認します．
```
$ git remote -v
```
##### ●  何も出力されない場合
下のように入力してください．(Host名とユーザー名は，**4. PCに設定を登録する**の**Config**ファイルの中身を参照してください．)
```
git remote add origin git@(Host名):ユーザー名/ディレクトリ名.git
```
アカウント2に接続した場合，下のように表示されたらOKです．
```
origin　git@Sub:sub/接続したいリポジトリ名.git (fetch)
origin　git@Sub:sub/接続したいリポジトリ名.git (push)
```
##### ●  接続場所が違う場合
下のように入力して上書きしてください．
```
$ git remote set-url origin git@ホスト名:ユーザー名/接続したいリポジトリ名.git
```
<br>

さらに接続できているかの確認をします．
```
$ ssh -T git@github.com
```
下のような表示で正しいアカウント名になっていれば大丈夫です．
```
Hi アカウント名! You've successfully authenticated, but GitHub does not provide shell access.
```
エラーが出たり，アカウント名が違う場合下の手順を踏むと解決することが多いです．
```
$ eval "$(ssh-agent -s)"
Agent pid 数字
```
```
$ ssh-add ~/.ssh/秘密鍵のファイル名
```
例`` ssh-add ~/.ssh/id_rsa_sub``
最後にもう一度確認してあっていることを確認してください．
```
$ ssh -T git@github.com
Hi Sub! You've successfully authenticated, but GitHub does not provide shell access.
```

# 補足
5は過不足のほどが不明です．正確な情報分かれば記事を修正します．

# 作業環境
・Windows11
・Ubuntu20.04.6 LTS

# 参考文献
・vscodeで使用するgithubのアカウント切り替え方法
　https://qiita.com/namachoco0144/items/0d193b868b80319ed864
・コマンド1つでGitHubのアカウントを切り替えるテクニック
　https://note.com/bluecode_inc/n/n3f67774c8642
・Visual Studio CodeでGitHubの複数アカウントを使い分ける
　https://qiita.com/ykoizumi0903/items/44e24d4180ae931552ce
・複数のGitHubアカウントを使い分けたい時の設定方法とTips
　https://zenn.dev/taichifukumoto/articles/how-to-use-multiple-github-accounts