10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GitHub で2つのアカウントのSSH鍵とレポジトリを使い分ける方法

Last updated at Posted at 2020-11-21

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) を登録してください。

:bulb: 公開鍵の登録方法: 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"

:bulb: フォルダー内の .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

参考

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?