目次
手順
既にプライベートのアカウントが設定済みとします。- SSHファイルを作成してGitHubに追加
- シングルサインオン用にSSHファイルを認証
- .ssh/configに追記
- SSH接続テスト
- ディレクトリごとにユーザーを切り替えるようにする
- リポジトリをclone
1. SSHファイルを作成してGitHubに追加
SSHファイル作成
$ mkdir ~/.ssh/work
$ ssh-keygen -t rsa -b 4096 -C "work@example.com" -f ~/.ssh/work/id_rsa
$ Generating public/private rsa key pair.
$ Enter passphrase (empty for no passphrase):
パスワードは空でOK。
GitHubに追加
「Setting » SSH and GPG keys」にアクセスして、New SSH key で公開鍵を追加。2. シングルサインオン用にSSHファイルを認証
シングルサインオン(二段階認証)が必須になっている organization の場合、この状態で clone などを実行すると以下のようなエラーが出ます。ERROR: The `kgl-websites' organization has enabled or enforced SAML SSO. To access
this repository, you must use the HTTPS remote with a personal access token
or SSH with an SSH key and passphrase
that has been authorized for this organization. Visit
https://docs.github.com/articles/authenticating-to-a-github-organization-with-saml-single-sign-on/ for more information.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
これを回避するためには、設定したSSHキーに対してシングルサインオン認証済みにする必要があります。先ほどの「Setting » SSH and GPG keys」にアクセスして、認証したいSSHキーの Configure SSO をクリック。認証したいorganizationを選んで指示に従って認証を行えばOK。詳細は、エラーメッセージにあるページの中に記載されている以下のページにあります。
Authorizing an SSH key for use with SAML single sign-on – GitHub Enterprise Cloud Docs
3. .ssh/configに追記
現在、.ssh/config は以下のような記述がある状態だと思います。Host github
HostName github.com
IdentityFile ~/.ssh/id_rsa
User git
ここに業務用アカウントの設定を追記します。
Host github.work
HostName github.com
IdentityFile ~/.ssh/work/id_rsa
User git
ホスト名は何でも良いのですが、Gitの都合でアンダーバーは避けてドットなどにしておいた方が良いそうです。
4. SSH接続テスト
元々の設定と、新しい設定それぞれで接続テスト。それぞれのユーザー名が返ってくればOKです。$ ssh -T github
Hi ippei! You've successfully authenticated, but GitHub does not provide shell access
$ ssh -T github.work
Hi ippeiwork! You've successfully authenticated, but GitHub does not provide shell access
5. ディレクトリごとにユーザーを切り替えるようにする
gitの機能を使ってディレクトリごとにユーザを切り替えるようにします。新しいファイル .gitconfig-workを作成
[user]
name = ippeiwork
email = work@example.com
.gitconfigに切り替え設定を追加
[includeIf "gitdir/i:E:/work/projects/"]
path = ~/.gitconfig-work
/i を入れておくとパスの大文字小文字を区別しなくなります。おまじない代わりに。
動作確認
$ cd E:\private\projects
$ git config --show-origin --get user.email
file:C:/Users/hoge/.gitconfig private@example.com
$ cd E:\work\projects
$ git init
$ git config --show-origin --get user.email
file:C:/Users/hoge/.gitconfig-work work@example.com
注意:Git管理されていないディレクトリではincludeIfが動かない
git管理されていないディレクトリでは、デフォルトの設定が使われます。これからリポジトリをcloneするような空のディレクトリでユーザーを切り替えるには git init コマンドで .git ディレクトリを生成しておく必要があります。6. リポジトリをclone
メインとサブとでcloneコマンドが変わります。メインの場合
$ git clone git@github.com:sample/sample.git
サブの場合
$ git clone git@github.work:sample/sample.git
@以下に .ssh/config で設定した Host を記述します。それだけです。commit や push は変わりません。
まとめ
これで複数アカウントを使うことになっても大丈夫です。あとは開発するだけです。参考サイト
GitHubで複数アカウントを使い分ける方法 – わくわくBankAuthorizing an SSH key for use with SAML single sign-on – GitHub Enterprise Cloud Docs