はじめに
最近、インターン生として業務に参加しました。
そのなかで業務用の GitHub アカウントを頂いたんですが、私用のアカウントとの使い分けがちょっとだけ難しかったので、忘れないようにメモを残しておきます。
(WSLを使用しているので、他環境の場合は適宜読み替えてください)
前提:GitHub における複数アカウントの所持について
GitHub によるアカウント利用条件についてに、以下のように記載があります。
保有できる無料アカウントは 1 つのみです。
そのため、複数アカウントの使用にはくれぐれもご注意ください。特に理由がない限り、無料アカウントを複数持つことは推奨されません。
早速やってみる
例として、以下の2つのアカウントを用意しました。
main main@example.com
sub sub@example.com
また、main
のほうのアカウントには ssh 鍵の登録がされているものとします。
GitHub アカウントに ssh 鍵を紐づける方法については詳しく解説された記事があるので、こちらを参考にしてください。
そしたら、sub
のほうに紐づける ssh 鍵を生成します。前提として、1アカウントにつきひとつの ssh 鍵を使用します。
ssh-keygen -t rsa
コマンドを実行すると、以下のようにファイル名を決めるメッセージが出ます。ここでは id_sub_rsa
としますが、任意で変更してください。
パスワードに関してはしなくても構いません。
Generating public/private rsa key pair.
Enter file in which to save the key (/home/yotu/.ssh/id_rsa):
そしたら~/.ssh
フォルダを開き、config
ファイルを作ります。すでに存在している場合は編集します。
cd ~/.ssh
vi config
開いたら、以下のように編集します。
# メインアカウント
Host github
HostName github.com
IdentityFile ~/.ssh/id_rsa
User git
Port 22
TCPKeepAlive yes
IdentitiesOnly yes
# サブアカウント
Host github-sub
HostName github.com
IdentityFile ~/.ssh/id_sub_rsa # ←さっき作ったファイル
User git
Port 22
TCPKeepAlive yes
IdenitiesOnly yes
サブアカウントの IdentityFile
に、先ほど作成した ssh 鍵のファイル名を指定します。あとは大体コピーでOK。
ここまでできたら、以下のコマンドで ssh 接続の確認をしてみます。
ssh -T github-sub
問題がなければ、以下のようにメッセージが返されます。
$ ssh -T github-sub
Hi sub! You've successfully authenticated, but GitHub does not provide shell access.
このメッセージが表示されなかったり、sub
と表示されているところがサブアカウント名以外だった場合、うまくいってない可能性が高いです。
その場合は、config
ファイルの記述が正しいか見直してください。
アカウントの切り替え
ここまで ssh 鍵の連携をしてきましたが、いちどに扱えるアカウントはひとつです。そのため、例えばサブアカウントで作業したい場合、以下のようなコマンドでサブアカウントに切り替えをする作業が毎回必要です。
git config --global user.name "sub"
git config --global user.email "sub@example.com"
こんなコマンド、毎回打つのは面倒です。なので、コマンド一つでできるようにしちゃいましょう。
まずは以下のコマンドで~/.bashrc
を開きます。zsh の場合は ~/.zshrc
に書き換えてください。
vim ~/.bashrc
そしたら一番下に以下のように追加します。zsh も同様です。
function gitmain() {
git config --global user.name "main"
git config --global user.email main@example.com"
}
function gitsub() {
git config --global user.name "sub"
git config --global user.email "sub@example.com"
}
関数名 = コマンド名です。
入力を保存したら、いちどコンソールを再起動します。
そしたら、サブ垢に切り替えてみます。以下のように、さっき登録したコマンドをそのまま打つことで実行できます。
gitsub
とくにメッセージなどは出ませんが、以下のコマンドで変更されたかを確認することができます。
git config --global user.name
git config --global user.email
たとえば私の場合、以下のように表示されます。
$ git config --global user.name
sub
$ git config --global user.email
sub@example.com
メインアカウントに戻すには、gitmain
コマンドを実行するだけです。
サブアカウントで参加しているリポジトリをクローンする
ここまでサブアカウントの追加をしてきましたが、サブアカウントでgit clone
したりするときは注意が必要です。
例として、piyo
さんのpiyopiyo
というプライベートなリポジトリを クローンするとします。
サブアカウントにはpiyopiyo
のアクセス権がありますが、メインアカウントにはありません。
いつものようにリポジトリのページから ssh を利用したクローンのコマンドをコピーペーストすると、以下のような感じになります。
git clone git@github.com:piyo/piyopiyo.git
ただし...このコマンドはうまく動作しません。
おそらく、以下のようなエラーが発生すると思います。
$ git clone git@github.com:piyo/piyopiyo.git
Cloning into 'piyopiyo'...
ERROR: Repository not found.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
要約すると「piyopiyo
なんてリポジトリは見つからないよ!」と言われています。これは、デフォルトだとメインアカウントのほうの ssh 鍵でアクセスされるためです。
ホストを指定してアクセスする場合、以下のように変更します。
git clone <ホスト名>:piyo/piyopiyo.git
「ホスト名」というのは、config
に指定した Host
の部分です。この場合、サブアカウントのホスト名は github-sub
です。
変更を適用したものが下のような感じ。
git clone github-sub:piyo/piyopiyo.git
こうすることでサブアカウントの ssh 鍵が使用され、認証が通ります。