📝

GitHubアカウントを使い分ける方法:WorkとPrivateの効率的な管理

2024/11/04に公開

はじめに

会社の人ともGitHubアカウントを共有する機会ができたので、仕事用のGitHubアカウントを新たに作成し、プライベートと仕事用でそれぞれアカウントを使い分けたいなと思った為、快適にアカウントの切り替えができるように設定を行いました。
その中で行き詰まった点がいくつかあったので、それを振り返りながら、私のように同じ状況で困っている方の一助になればいいなと思い、今回記事にすることにしました。

動作環境

  • マシン : M1 MacBookAir
  • OS : MacOS Sequoia
  • シェル : zsh 5.9 (x86_64-apple-darwin24.0)

手順

新しいSSH鍵(公開鍵と秘密鍵)を生成する。

~
# .sshディレクトリに移動
cd ~/.ssh
~/.ssh
# .sshディレクトリに移動
ssh-keygen -t ed25519 -C "your_email@example.com"

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"を実行すると、以下のメッセージが表示されるのでそれぞれに答えた後、SSH鍵(公開鍵・秘密鍵)が生成されます。

~/.ssh
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/user/.ssh/id_ed25519): work # Work用のファイル名を入力(ファイル名は任意)
Enter passphrase (empty for no passphrase): # [Type a passphrase]
Enter same passphrase again: # [Type passphrase again]

鍵が生成されていることを確認する。

~/.ssh
ls
private    private.pub    work    work.pub    known_hosts

生成されたSSHキー(公開鍵)をGitHubアカウントへ追加する

workアカウントの公開鍵をコピ-する。

~
cat ~/.ssh/work.pub
~/.ssh/work.pub
ssh-ed25519 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX your_email@example.com

以下URLにアクセスして、「New SSH Key」をクリック
https://github.com/settings/keys

  • 「Title」は任意
  • 「Key type」はそのまま。
  • 「Key」は先ほどコピーしたwork.pubの中身をコピペする。

入力完了後、「Add SSH Key」をクリックして完了。

configファイルの設定

どのSSH鍵を使用してどのGitHubアカウントにアクセスするかを区別するためです。
ここでは、Private用とWork用を自動的に使い分けられるようにconfigファイルの設定を行います。
Vimでconfigファイルを編集する。

~/.ssh
vi config
~/.ssh/config
#privateアカウント
Host github-private
  HostName github.com
  IdentityFile ~/.ssh/private #privateアカウントの秘密鍵のファイル
  User git
  Port 22
  TCPKeepAlive yes
  IdentitiesOnly yes

#workアカウント
Host github-work
  HostName github.com
  IdentityFile ~/.ssh/work #workアカウントの秘密鍵のファイル
  User git
  Port 22
  TCPKeepAlive yes
  IdentitiesOnly yes

設定の意味

  • Host: 識別名です。リポジトリのリモートURLでこの名前を使います。
  • HostName: 実際のホスト名です。GitHubならgithub.com。
  • User: SSH接続時のユーザー名。Gitでは常にgitになります。
  • IdentityFile: この接続に使用するSSHキーのパスです。個人アカウントと仕事用アカウントで別々のキーを指定します。
  • User: SSH接続に使うユーザー名です。GitHubの場合は常にgitです。
  • Port: SSH接続に使用するポート番号です。標準のSSHポートである22が指定されています。
  • TCPKeepAlive: 接続が自動で切れないように、TCP接続を定期的に保つ設定です。yesにすると、SSH接続が長時間アイドル状態になっても維持されやすくなります。
  • IdentitiesOnly: 明示的に指定した鍵のみを使用するオプションです。これにより、他のSSH鍵が自動的に試されるのを防ぎます。

上記の設定を行ったら、:wqで保存して終了する。

接続確認

下記コマンドでSSH接続ができるか確認する。

# privateアカウントの接続を確認する
ssh -T github-private
Hi [privateアカウントのユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.

# workアカウントの接続を確認する
ssh -T github-work
Hi [workアカウントのユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.

上記の通り出力されたらOK。

ディレクトリごとにGitHubアカウントを切り替える

Gitアカウントを複数管理していると、アカウント切り替えが非常に面倒になります。これを解決してくれるのが、includeIfです。
これを設定してからかなり楽になったので、こちらの記事を参考に設定してみてください。

今後の改善点

✅ リモート接続時のエイリアス設定の自動化

まとめ

これでとりあえずGitHubの複数アカウントの運用はできそうです。
但しまだまだ不便な点がある為、そちらについては後日追記、新たに記事を作成するなどして記録を残していきたいと思います。

参考文献

https://zenn.dev/taichifukumoto/articles/how-to-use-multiple-github-accounts
https://docs.github.com/ja/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-personal-account/managing-multiple-accounts
https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
https://zenn.dev/hr0t15/articles/2f65b5a776b45c
https://qiita.com/shungo_m/items/387d70b1645ae03435b5

Discussion