githubでの複数アカウントの使い分けかた

githubで複数アカウントを使い分ける方法を紹介します。gitそのものではなくsshの使い方になってしまいますが。

前置き

みなさんgithubは使ってますか? 趣味のオープンソース活動だけでなく、最近はお仕事でgithubを利用する人も多くなってきたことでしょう。

そうなると困るのが情報漏えい対策です。githubではお金を払えばprivateなレポジトリや組織を作ることができ、それらを活用することでNDAの下にあるプロジェクトも安心して取り扱えます。というわけで私もプライベートに使ってるアカウントをそのまま仕事に使おうと考え評価していたのですが、ある問題点が浮上しました。githubから飛んでくる通知 メールです。あれをプライベートと仕事で同じメールアカウントに飛ばしてしまうと、オペミスなど万が一の事故が起こらないとは言えないのです。特に粗忽な私はメールのオペミスしやすいですからね。

そこで複数アカウント運用を採用しました。仕事用メールアドレスで仕事用のアカウントを取り、仕事のレポジトリにはそちらで参加するという具合です。これは一見、とても良い自然なアイデアに見えました。

問題点

しかしgithub上の複数アカウントに対してはgitコマンドからの呼び分けができなかったのです。いえ実際はちょっとした工夫をするとできましたので、それを紹介するというのがこの記事の趣旨です。

まずは問題を明らかにしましょう。githubへのアクセスはこんなコマンドで行います。

$ git clone git@github.com:koron/nyancat-vim

こうすると裏ではSSHで通信が確立しています。githubではこの時に使うSSH鍵でアカウントを判別し、そのアカウントが該当レポジトリへのアクセス権を持っているかどうかを判定しているようです。

つまりgithubではある1つのSSH鍵を複数アカウントに使うことはできません。なのですでに使っている鍵を別のアカウントにて登録しようとすると拒否されます。だから特別な設定をしていないSSHでは1つのPCには1つのSSH鍵しかありませんので、githubのアカウントを使い分けることができないのです。

解決方法

逆にSSHでは設定すれば複数の鍵を使い分けられるということです。SSHにはホスト毎に使う鍵ファイルを指定する機能があります。

~/.ssh/config に次のように書くと2つの鍵を両方試すようになります。

Host github.com
IdentityFile ~/.ssh/personal_github_key
IdentityFile ~/.ssh/work_github_key

これだけでも目的は達成できてしまいますが、2つの鍵を順番に試しているだけです。厳密には「切り替えている」ことにはなりません。そこでもう一工夫しましょう。

Host github
HostName github.com
IdentityFile ~/.ssh/personal_github_key

Host github-work
HostName github.com
IdentityFile ~/.ssh/work_github_key 

github.comに2つのエイリアスを設け、それぞれで鍵を使い分けています。正しいお作法では User を指定したほうが良い気もしますが、とりあえずはこのように設定すれば次のように「切り替えて」利用できます。

# プライベートなアカウント(鍵)でアクセスする時
$ git clone git@github:koron/nyancat-vim

# 仕事のアカウント(鍵)でアクセスする時
$ git clone git@github-work:koron/nyancat-vim

もとはホスト名 github.com を指定していた箇所が、エイリアス名に変わっていることに注意してください。

ま☆と☆め

以上、githubのアカウントを切り替える方法の紹介でした。

なお「1つのPCでプライベートと仕事のレポジトリ両方に触るのはダメだろ」というツッコミは締め切られました。