人によってはGitHubのアカウントを2つ以上持っていたり、社内で複数のGitHubアカウントを使い分ける必要があったりする場合がある。 例えば仕事用と趣味用でGitHubアカウントを2つ用意していたり、その場合は1つのPCから複数のGitHubに対して制御を行う必要がある。
この場合、SSHキーをどうすればよいのかという問題だが、単純に同じSSHキーを登録しておけばいいんじゃない?と思っていたら、それはGitHub的に使用できないらしい。 実際、別のアカウントでGitHubに登録しているSSH公開鍵をもう1つのGitHubのアカウントで登録しようと売ると、「このキーすでに使われてるぞ」と怒られてしまう。
そこでどうするかというと、手元のPCでもう一つのSSHキーを生成する。例えばこれをid_rsa_self
とする。
すると、新たに~/.ssh/id_rsa_self.pub
が生成されるので、これをGitHubに登録するわけだ。
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/msyksphinz/.ssh/id_rsa): /home/msyksphinz/.ssh/id_rsa_self Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in id_rsa_self. Your public key has been saved in id_rsa_self.pub. The key fingerprint is: ...
そしてこの2つをどのようにして使い分けるかという話だが、このためには~/.ssh/config
に設定を記述することになる。
~/ssh/config
# Personal GitHub account Host msyksphinz HostName github.com User git AddKeysToAgent yes IdentityFile ~/.ssh/id_rsa # Work GitHub account Host msyksphinz-self HostName github.com User git AddKeysToAgent yes IdentityFile ~/.ssh/id_rsa_self
config
ファイルはパーミッションを600にしないと警告されるので気を付けること。
2つのコンフィグレーションを用意した。どちらともHostName
をgithub.comに設定しているのだが、IdentityFile
をそれぞれ別のファイルに設定している。
そしてこのコンフィグレーションをどのように使い分けるのかということだが、これはgit clone
などの時にアドレスとして使える。
つまり、上記の場合でmsyksphinz-self
のキーを使ってcloneしたい場合、以下のようにすればよい。
git clone git@msyksphinz-self:msyksphinz-self/rumy-make.git
msyksphinz-self:
で、msyksphinz-selfのアカウントでgithub.com
へのアクセスを行ってくれる。
.git/config
を見てみると、URLとしてはmsyksphinz-self
を使ったアドレスになっているので、既存のClone済みのリポジトリについても同じようにURLを変更すれば、複数のGitHubアカウントを使い分けることができるようになる。
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = git@msyksphinz-self:msyksphinz-self/rumy-make.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master