🐡

複数のGitHubアカウントをSSHで使い分けるための設定

2022/08/05に公開

個人用、会社用などGitHubアカウントを複数使い分ける際の設定方法を、備忘録を兼ねてまとめました。

SSH鍵の作成

まずはメインのSSH鍵を作成します。main@example.com にはGitHubのメインアカウントのメールアドレスを入れてください。id_rsa は鍵の名前です。任意なので id_main_rsa などの名前でもOK。

cd ~/.ssh
ssh-keygen -t rsa -C main@example.com -f id_rsa

Enter passphrase (empty for no passphrase): と表示されたら Enter。
Enter same passphrase again: と表示されたらもう一度 Enter。これでSSH鍵が作成されました。

~/.sshid_rsaid_rsa.pug が作成されていることを確認しましょう。

ls

同じように、次はサブアカウント用のSSH鍵を作ります。

ssh-keygen -t rsa -C sub@example.com -f id_sub_rsa

同じように作成したら、~/.sshid_sub_rsaid_sub_rsa.pub が作成されていることを確認しましょう。

SSHの設定(~/.ssh/config)

~/.ssh/config ファイルを開き(なければ作成し)、以下のように編集します。

~/.ssh/config
#メインアカウント
Host github.com #任意のホスト名
  HostName github.com
  IdentityFile ~/.ssh/id_rsa #メインアカウントの鍵
  User git
  TCPKeepAlive yes
  IdentitiesOnly yes

#サブアカウント
Host github.com.sub #任意のホスト名
  HostName github.com
  IdentityFile ~/.ssh/id_sub_rsa #サブアカウントの鍵
  User git
  TCPKeepAlive yes
  IdentitiesOnly yes

TCPKeepAlive yes はSSH接続を維持するための記述、IdentitiesOnly は指定した秘密鍵のみを使用するための記述のようです。僕はあまり詳しくないのですが、 おまじないとして入れてあります。

GitHubに公開鍵を登録

まずはメインアカウントの設定から。GitHubにメインアカウントでログインします。

↓のGitHubのプロフィールページのSSH and GPG keys → `New SSH key' ボタンをクリック。

https://github.com/settings/profile

Title は任意、Keyには id_rsa.pub の中身のテキストをまるごとコピーして貼り付けます。

以下のコマンドで中身をコピーすることができます。

pbcopy < ~/.ssh/id_rsa.pub

貼り付けたら Add SSH Key ボタンををクリックして完了します。

同じように、GitHubにサブアカウントでログインし、サブアカウント側も同じように設定します。

サブの公開鍵の中身をコピーする時はこんな感じ↓

pbcopy < ~/.ssh/id_sub_rsa.pub

SSH接続テスト

まずはメインアカウントの接続テスト。 ~/.ssh/config で設定したメインのホスト名を指定します。

ssh -T github.com

ターミナルに下のようなメッセージが表示されたらOK!

Hi [メインのユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.

お次はサブアカウントの接続テスト。~/.ssh/config で設定したサブのホスト名を指定します。

ssh -T github.com.sub

今度はサブのユーザー名で表示されていればOK。

Hi [サブのユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.

git clone / git add する

この記事で紹介した方法の場合、メインアカウントは通常どおりで git clone できます。
サブアカウントの場合は、以下を参考に変更してください。

# メイン
git clone git@github.com:username/repository.git
git remote add origin git@github.com:username/repository.git
# サブ
git clone git@github.com.sub:username/repository.git
git remote add origin git@github.com.sub:username/repository.git

git の remote.origin.url の設定(.git/config)

以下のコマンドでgitのURLが正しく設定されているか確認します。

git config remote.origin.url

上記のgit cloneのURLと合致していればOK。なっていない場合は変更しましょう。

# サブの場合
git config remote.origin.url git@github.com.sub:username/repository.git

git の user.name / user.emailの設定

リポジトリごとに名前とメールアドレスの設定をしましょう。

グローバル側にはメインの名前とメールアドレスを設定しておき、サブの場合はローカル側で設定をするといいかもしれません。

git config --global user.name [メインのユーザー名]
git config --global user.email [メインのメールアドレス]
cd path/to/repository
git config --local user.name [サブのユーザー名]
git config --local user.email [サブのメールアドレス]

参考

Discussion