eureka

複数のGitHubアカウントをsshで使い分ける

0
github

サブアカウントの秘密鍵と公開鍵を作る

subという名前の秘密鍵と公開鍵を作成します。
メールアドレスの部分は適宜変更してください。

$ ssh-keygen -t ed25519 -N "" -f ~/.ssh/sub -C "GitHubに登録したサブアカウントのメールアドレス"

~/.sshの配下に二つめの秘密鍵が出来上がりました。

$ ls ~/.ssh
id_rsa		id_rsa.pub	known_hosts	sub		sub.pub

GitHubに公開鍵を登録

まずは公開鍵の中身をクリップボードにコピーします。

$ pbcopy < ~/.ssh/sub.pub

GitHubのサブアカウントにログインしてSettings > SSH and GPG keysに進みます。

New SSH key をクリックしてTitleとKeyを入力します。
Titleはなんでもいいですが、私はデバイス名を書いています。Keyに先ほどコピーした公開鍵の中身をそのままペーストします。

入力できたらAdd SSH keyのボタンを押して保存しましょう。

sshのconfigファイル作成

~/.ssh/configというファイルを作成します。

$ vim ~/.ssh/config

Host名とUser、IdentityFileをそれぞれ入力します。

Host github # メイン用の名前
	HostName github.com
	User main-user # メインアカウントのユーザー名
	IdentityFile ~/.ssh/id_rsa # メインアカウントの秘密鍵
	IdentitiesOnly yes
Host github-sub # サブ用の名前
	HostName github.com
	User sub-user # サブアカウントのユーザー名
	IdentityFile ~/.ssh/sub # サブアカウントの秘密鍵
	IdentitiesOnly yes

入力内容を保存したら接続テストをします。
うまくいけば下記のように表示されます。

$ ssh -T git@github
Hi main-user! You've successfully authenticated, but GitHub does not provide shell access.

$ ssh -T git@github-sub
Hi sub-user! You've successfully authenticated, but GitHub does not provide shell access.

git@の後ろをconfigに登録している名前で指定するとサブアカウントでもgit cloneができるようになります。

$ git clone git@github-sub:{githubのID}/{リポジトリ名}.git

ちなみにメインアカウントは今まで通りで大丈夫です。

$ git clone git@github.com:{githubのID}/{リポジトリ名}.git

gitconfigの編集

.gitconfigでディレクトリごとの設定を分けます。
作業しているディレクトリ内でGitHubアカウントを自動で認識させるものです。

~/.gitconfigと同じ階層に.gitconfig-main.gitconfig-subを作成します。

.gitconfig-main

まずは.gitconfig-mainを作成します。
ここにはメインで使用するGitHubのユーザー情報を記載します。

[user]
  name  = user_name # メインアカウントのユーザー名
  email = xxxxxxxx@gmail.com # メインアカウントのメールアドレス

続いて.gitconfig-subを作成します。こちらにはサブアカウントのGitHubユーザー情報を記載します。

[user]
  name  = sub_user_name # サブアカウントのユーザー名
  email = xxxxxxxx@gmail.com # サブアカウントのメールアドレス

.gitconfigに作業ディレクトリごとに読み込むファイルを追記します。

[user]
  [includeIf "gitdir:/user/workspace-main/"]
    path = ~/.gitconfig_main

  [includeIf "gitdir:/user/workspace-sub/"]
    path = ~/.gitconfig_sub

これで作業ディレクトリ下でgit cloneしたリポジトリ内で設定したユーザー情報が確認できていればOKです!(一覧がたくさん出るので探してみてください)

$ cd /user/workspace-sub/my-repository/
$ git config --list
user.name=sub_user_name
user.email=xxxxxxxx@gmail.com

.gitconfigに指定していないリポジトリではメインアカウントのほうが取得されていたので、メインアカウントは作業ディレクトリの指定をしなくてもいいかもしれません・・・?
こちらは情報不足なので分かり次第更新したいと思います。

参考にしたサイト

ありがとうございました!

0