1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[GitHub] 複数アカウントを扱うときのメモ (WSL2)

Posted at

はじめに

最近、インターン生として業務に参加しました。
そのなかで業務用の 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 鍵が使用され、認証が通ります。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?