GitHub で2つのアカウントを使い分けているエンジニアは多いことでしょう。例えば、組織用アカウントと個人用アカウントを持っているエンジニアは、それぞれのアカウントで異なるリポジトリーに対して作業しているはずです。
1つのアカウントで作業している時は、ユーザー名やSSH鍵の使い分けを意識することはありません。しかし、2つになると、コミットログに書き込まれるユーザー名やメールアドレスを使い分けたり、git pull/push
時に使うSSH鍵を使い分ける必要が出てきます。
以下に、自動で設定を使い分ける方法を記します。
やりたいこと
- それぞれの作業フォルダーでコミット時、対応するユーザー名とメールアドレスを使う
-
git pull/push
などリモート操作をする時、アカウントに対応するSSH鍵を自動で使い分ける- リポジトリAでは、ユーザーAのSSH鍵を使う
- リポジトリBでは、ユーザーBのSSH鍵を使う
今回は以下のように、2つのアカウントを使い分ける想定で進めます。
仕事用 | 個人用 | |
---|---|---|
アカウント名 | john | bob |
リポジトリ | john/project-john.git | bob/project-bob.git |
設定方法
アカウントに対応する公開鍵を作成する
まずはそれぞれのアカウントに対応するSSH鍵ペアが必要です。 ssh-keygen
で作成してください。今回は鍵ファイルに id_rsa_<アカウント名>
という名前を付けます。
cd ~/.ssh
ssh-keygen -t rsa -f id_rsa_john
(パスフレーズを入力、またはそのまま Enter 2回)
ssh-keygen -t rsa -f id_rsa_bob
(パスフレーズを入力、またはそのまま Enter 2回)
これで秘密鍵と公開鍵のペアが作成されます。
公開鍵を GitHub にセットする
ユーザーA,B それぞれのアカウントで GitHub にログインし、 "Settings > SSH and GPG Keys" 画面から、対応する公開鍵 (id_rsa_<アカウント名>.pub
) を登録してください。
公開鍵の登録方法: Adding a new SSH key to your GitHub account - GitHub Docs
ローカル git config を設定する
それぞれの作業フォルダーで使用するユーザー名とメールアドレスを設定します。これらはコミットメッセージに記録されます。
cd ~/project-john
git config --local user.name "John"
git config --local user.email "john@example.com"
cd ~/project-bob
git config --local user.name "Bob"
git config --local user.email "bob@example.com"
フォルダー内の .git/config
を直接編集しても OK です。
~/.ssh/config を設定
続いて、リポジトリ毎にSSH鍵を使い分けるようにするため、~/.ssh/config
ファイルを編集しします。
以下のように Host
行と IdentityFile
行を書き分けてください。
# 会社用: SSH鍵 id_rsa_john を使う
Host github.com.john
Hostname github.com
User git
IdentityFile ~/.ssh/id_rsa_john
# 個人用: SSH鍵 id_rsa_bob を使う
Host github.com.bob
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_bob
リモート URL に、上で設定したホスト名を指定する
最後に再び git config を設定します。以下のように、リモートURLに git@<ホスト>:<リポジトリURL>
を指定してください。
cd ~/project-john
git remote set-url origin git@github.com.john:john/project-john.git
cd ~/project-bob
git remote set-url origin git@github.com.bob:bob/project-bob.git
これで、 ~/.ssh/config
で設定した Host に対応するSSHキーが使われるようになります。
設定確認&動作確認
cd ~/project-john
git pull
# => id_rsa_john が使われて pull 成功すれば OK
cd ~/project-bob
git pull
# => id_rsa_bob が使われて pull 成功すれば OK