はじめに
会社のプロジェクトは会社のGitHubアカウントで、個人プロジェクトは個人のアカウントで管理するのが一般的です。
しかし、2つのアカウントを切り替えるのは手間がかかり、SSHキーの衝突によって認証エラーが発生することもよくあります。
この記事では、SSHの設定によってアカウントの切り替えを自動化し、安定して管理する方法をご紹介します。
デバッグ:どのSSHキーが使用されているか確認する
SSH接続時に使用されているキーを確認するには、以下のコマンドを実行します:
ssh -vT git@github.com
# 出力:...
# debug1: Offering public key: /Users/you/.ssh/**id_ed25519_personal**
# ...
このログから、GitHubに提供されているキーがどれかを確認できます。
もし意図したアカウントのキーと一致していない場合は、設定の修正が必要です。
SSHキーの作成
アカウントごとに別々のSSHキーを作成します:
個人用アカウント
ssh-keygen -t ed25519 -C "me@example.com" -f ~/.ssh/id_ed25519_personal
会社用アカウント
ssh-keygen -t ed25519 -C "me@company.com" -f ~/.ssh/id_ed25519_work
GitHubに公開鍵を登録する
各アカウントのGitHubのSSH設定ページで、上記で生成しt該当の公開鍵(.pubファイル)を登録します。
~/.ssh/configの設定
SSH接続時に使用するキーを明示的に指定することで、衝突を防ぎます:
個人アカウント用
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
会社アカウント用
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
- HostはGitのリモートURLで使用する別名です。
- IdentitiesOnly yesにより、指定したキーのみが使用され、エージェントやデフォルトのキーは無視されます。
認証テスト
設定が正しく行われているか、以下のコマンドで確認します:
ssh -T git@github-personal
# 出力:Hi personal-github-username! You've successfully authenticated, but GitHub does not provide shell access.
ssh -T git@github-work
# 出力:Hi work-github-username! You've successfully authenticated, but GitHub does not provide shell access.
プロジェクトごとのGitリモート設定
各プロジェクトで正しいSSHキーが使用されるように、リモートURLを設定します。
個人プロジェクトの場合:
git remote set-url origin git@github-personal:your-username/your-repo.git
会社プロジェクトの場合:
git remote set-url origin git@github-work:company-org/repo.git
これにより、それぞれのプロジェクトが自動的に正しいSSHキーを使ってGitHubにアクセスします。