GitHubアカウントを使い分けたい
はじめに
会社の人ともGitHubアカウントを共有する機会があったので、仕事用のGitHubアカウントを新たに作成し、プライベートと仕事用でそれぞれアカウントを使い分けるときに快適にアカウントの切り替えができるように設定を行いました。
その中で行き詰まった点がいくつかあったので、それを振り返りながら記録として残しておこうと思った次第です。
動作環境
- マシン: M1 MacBookAir
- OS: MacOS Sequoia
- シェル: zsh 5.9 (x86_64-apple-darwin24.0)
手順
新しいSSH鍵(公開鍵と秘密鍵)を生成する。
# .sshディレクトリに移動
cd ~/.ssh
ssh-keygen -t ed25519 -C "your_email@example.com"
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
を実行すると、以下のメッセージが表示されるのでそれぞれに答えた後、SSH鍵(公開鍵・秘密鍵)が生成されます。
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/user/.ssh/id_ed25519): work # Work用のファイル名を入力(ファイル名は任意)
Enter passphrase (empty for no passphrase): # [Type a passphrase]
Enter same passphrase again: # [Type passphrase again]
鍵が生成されていることを確認する。
ls
private private.pub work work.pub known_hosts
生成されたSSHキー(公開鍵)をGitHubアカウントへ追加する
workアカウントの公開鍵をコピ-する。
cat ~/.ssh/work.pub
ssh-ed25519 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX your_email@example.com
以下URLにアクセスして、「New SSH Key」をクリック
https://github.com/settings/keys
- 「Title」は任意
- 「Key type」はそのまま。
- 「Key」は先ほどコピーしたwork.pubの中身をコピペする。
入力完了後、「Add SSH Key」をクリックして完了。
configファイルの設定
どのSSH鍵を使用してどのGitHubアカウントにアクセスするかを区別するためです。
ここでは、Private用とWork用を自動的に使い分けられるようにconfigファイルの設定を行います。
Vimでconfigファイルを編集する。
vi config
# privateアカウント
Host github-private
HostName github.com
IdentityFile ~/.ssh/private # privateアカウントの秘密鍵のファイル
User git
Port 22
TCPKeepAlive yes
IdentitiesOnly yes
# workアカウント
Host github-work
HostName github.com
IdentityFile ~/.ssh/work # workアカウントの秘密鍵のファイル
User git
Port 22
TCPKeepAlive yes
IdentitiesOnly yes
設定の意味
-
Host
: 識別名です。リポジトリのリモートURLでこの名前を使います。 -
HostName
: 実際のホスト名です。GitHubならgithub.com。 -
User
: SSH接続時のユーザー名。Gitでは常にgitになります。 -
IdentityFile
: この接続に使用するSSHキーのパスです。個人アカウントと仕事用アカウントで別々のキーを指定します。 -
User
: SSH接続に使うユーザー名です。GitHubの場合は常にgitです。 -
Port
: SSH接続に使用するポート番号です。標準のSSHポートである22が指定されています。 -
TCPKeepAlive
: 接続が自動で切れないように、TCP接続を定期的に保つ設定です。yesにすると、SSH接続が長時間アイドル状態になっても維持されやすくなります。 -
IdentitiesOnly
: 明示的に指定した鍵のみを使用するオプションです。これにより、他のSSH鍵が自動的に試されるのを防ぎます。
上記の設定を行ったら、:wq
で保存して終了する。
接続確認
下記コマンドでSSH接続ができるか確認する。
# privateアカウントの接続を確認する
ssh -T github-private
Hi [privateアカウントのユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.
# workアカウントの接続を確認する
ssh -T github-work
Hi [workアカウントのユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.
上記の通り出力されたら OK。
ディレクトリごとにGitHubアカウントを切り替える
Gitアカウントを複数管理していると、アカウント切り替えが非常に面倒になります。これを解決してくれるのが、includeIf
です。
~/.gitconfig
に次を追加
1. [includeIf "gitdir:~/work/"]
path = ~/.gitconfig_work
この設定は、~/work/
配下のリポジトリに対して、特定のGit設定(ここでは~/.gitconfig_work
)を適用するためのものです。
~/.gitconfig_work
を作成
2. [user]
name = work.name // Work用
email = your_work_email@example.com
3. リモートURL変換の設定を追加
メインの~/.gitconfig
に以下を追加します。
[url "git@github-work:"]
insteadOf = git@github.com:
4. いざ実証
Workディレクトリに移動してリポジトリをクローンします。
cd ~/work
git clone "git@github.com:username/repository.git"
クローンが成功したら、リモートURLが正しく設定されているか確認しましょう
cd repository
git remote -v
以下のようにgit@github-work:
が表示されれば成功です。
origin git@github-work:username/repository.git (fetch)
origin git@github-work:username/repository.git (push)
参考記事
Discussion