はじめに
私は1つのPCで5つのGitHubのアカウントを切り替えています。
何故そんなSNSの裏垢のような使い方を…? と思われるかもしれませんが、諸事情があるので触れないでください。(?)
冗談はさておき、社用アカウントと私用アカウントで分けている等GitHubのアカウントを複数持つ人も少なくないと思います。複数アカウントがある場合、同じPCでGitHubアカウントを切り替えるには少し設定が必要だったのでこちらで手順を紹介します。
この記事の対象者
- GitHubで複数のアカウントを所持していて、リポジトリ毎にアカウントを切り替えたい人
- GitHubのアカウントをTwitterの裏垢のように運用したい人
- GitHubのアカウントを切り替えて怪しい活動をしたい人
GitHubのアカウントの切り替え手順
前提
companyというGitHubアカウントとpirvateというGitHubアカウントを所持していると想定します。
1つのアカウントに紐付ける秘密鍵と公開鍵を生成する
まずはcompanyアカウントの秘密鍵と公開鍵を生成します。鍵周りは~/.ssh
ディレクトリを利用しますので、存在していないのであれば生成してください。
$ mkdir ~/.ssh # .sshディレクトリが存在しない場合
$ cd ~/.ssh # ~/.sshディレクトリに移動
$ ssh-keygen -t rsa -f <ファイル名> # ex) ssh-keygen -t rsa -f company
$ ls # <ファイル名> と <ファイル名>.pub が生成されているか確認
以上のコマンドを実行すると秘密鍵と公開鍵が生成されます。companyというファイル名を指定した場合、company
という秘密鍵ファイルと、company.pub
という公開鍵ファイルが生成されます。
~/.ssh/configファイルに設定を書き込む
※.gitconfigファイルとは別物なので注意
次に~/.sshディレクトリにconfigというファイルを作成し、そこに先ほど生成した秘密鍵の情報を登録します。
# カレントディレクトリ ~/.ssh
$ touch config # ~/.ssh/configファイルがない場合
$ vi config
以下configファイルの編集内容です
Host <ホスト名>
HostName github.com
IdentityFile ~/.ssh/<秘密鍵のファイル名>
User git
AddKeysToAgent yes
UseKeychain yes
# 以下設定例
Host company
HostName github.com
IdentityFile ~/.ssh/company
User git
AddKeysToAgent yes
UseKeychain yes
Host private
HostName github.com
IdentityFile ~/.ssh/private
User git
AddKeysToAgent yes
UseKeychain yes
以上のように設定を保存してconfigの設定は完了です。
こちらで設定したホスト名を指定することで、GitHubとのSSH認証をする際に秘密鍵のパス指定等を省略することが出来ます。
公開鍵をGitHub上で登録する
公開鍵のコピー
公開鍵の中身をコピーします。以下コマンドです。
pbcopy < ~/.ssh/<ファイル名>.pub
GitHubのサイト上で公開鍵登録
続いてGitHubの設定画面にアクセスして、SSH keysの設定メニュー上のNew SSH keyというボタンを押します。
以下手順画像です。
以上の手順で公開鍵の登録が完了し、SSH接続が出来るようになりました。GitHubとのSSH接続が正常に行われているか確認するコマンドは以下になります。
$ ssh -T <ホスト名>
接続が完了している場合、以下のようなメッセージが表示されます。
Hi <ホスト名>に紐付くGitHubアカウント名! You've successfully authenticated, but GitHub does not provide she
ll access.
GitHubとのSSHを利用したやりとり
GitHub上に登録されているリポジトリとやりとりを開始する際に、git remote add
やgit clone
等で接続設定をすると思います。
このときに先ほど~/.ssh/config
に登録したホスト名を指定します。
cloneするとき
例えばsample-userというユーザーもしくは組織が持つsample-repositoryというリポジトリをクローンするとします。
こちらのリポジトリに対してはprivateというホスト名で登録したGitHubアカウントでやりとりしようとする場合は、以下のようなコマンドになります。
$ git clone git@private:sample-user/sample-repository.git
リモートリポジトリを登録するとき
cloneした後にファイル編集をしてgit add
やgit push
をするにはリモートリポジトリを登録する必要があります。その時も先ほどのようにホスト名を指定します。以下コマンドになります。
$ git remote add origin git@private:sample-user/sample-repository.git
ローカルリポジトリのGitのconfig設定
先ほどGitHubとのSSHを利用した接続が完了したのですが、git add
をした際にemailとnameの設定を求められると思います。
その際は--local
オプションを指定することで、そのプロジェクト限定の設定になります。アカウントを複数切り替える場合は--local
オプションを指定した方が良いでしょう。
$ git config --local user.name "<ユーザー名>"
$ git config --local user.email "<メールアドレス>"
おわりに
私が複数アカウントを切り替える際に利用しているコマンドは以上になります。アカウントを切り替えて、表の自分と裏の自分、第三の自分と切り替えてソースコードにコミットしていきましょう!