概要
プライベートと仕事で1台のパソコンで2つのGitHubアカウントを管理する機会がありました。 ここではリポジトリのクローンやpush等、SSH接続するために必要な設定について記載します。
設定手順
現在の設定を確認する
まずはSSHがどのアカウントで認証されているかを確認します。
ssh -T git@github.com
SSHが設定できていれば、次のように返ってきます。
Hi <ユーザー名>! You've successfully authenticated, but GitHub does not provide shell access.
.ssh/configを設定する
SSHをGitHubアカウントによって使い分ける場合には、configで設定を行う必要があります。
例:
# メインアカウント
Host github-hoge
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_hoge
IdentitiesOnly yes
# サブアカウント
Host github-fuga
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_fuga
IdentitiesOnly yes
Hostは設定上のニックネームですHostNameは実際のホスト名ですUserはSSH接続先のサーバーにログインする時に使用するユーザー名です。(GitHubアカウント名とは別です。git@github.com:<user|organisation>/<repo>.gitでいう頭のgitがこれに相当します。)IdentityFileはSSH接続時に参照するSSH鍵のパスです。IdentitiesOnlyはSSHがどの鍵を認証に使うかを制限するための設定です。
特にIdentitiesOnly yesは、今回のように複数のGitHubアカウントを1台のパソコンで扱う場合、他の鍵を参照させないために必須の設定となります。
設定後確認
設定が済んだら、サブアカウントを確認するため次のコマンドを打ってみましょう
ssh -T git@<サブアカウントの Host>
例えば上記の設定だと次のコマンドです。
ssh -T git@github-fuga
設定ができていれば、サブアカウントのGitHubアカウント名で返事が返ってくるでしょう。
補足
もう一点、複数のGitHub運用で大事なことは、git/configユーザー名とE-mailアドレスの設定です。
デフォルトではメインアカウントが設定されているため、この操作を行わないと、意図しないアカウントでcommit, pushしてしまう可能性があります。
私はサブアカウントで管理するリポジトリ単位毎に設定を行います。 対象のリポジトリで以下を打ち込みます。
git config user.name "example-account-name"
git config user.email "example@mail.com"
まとめ
1台のパソコンで複数のGitHubアカウントを管理する際の.ssh/configとgit/configについて学ぶことができました。