Githubのアカウントを複数使い分ける方法

Githubのアカウントを複数使い分ける方法

概略

Githubで業務用と個人用の2アカウントを利用している。
普段は業務用しか使っていなかったが、いざ個人アカウントを利用しようとしたら、pushできない。
Githubへの認証などの設定が全くされていないのだから当然である。

その設定手順をメモ程度にまとめておく。

ssh-keyの生成

まずは以下コマンドでkeyの生成を行う。

> cd %USERPROFILE%\.ssh
> ssh-keygen -t rsa -b 4096 -C "メールアドレス"

質問がいくつかされるが、以下のように回答。

Enter file in which to save the key (/c/Users/Satoshi.T/.ssh/id_rsa): id_personal_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_personal_rsa
Your public key has been saved in id_personal_rsa.pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx メールアドレス
The key's randomart image is:
+---[RSA 4096]----+
|        xxxx   |
|       xxxxx     |
|      xxxxx |
|      xxxxx xxxxx.|
|      xxxxyzxxxx|
|      xxxxx  |
|      xxxxx  |
|      xxxxx   |
|                 |
+----[SHA256]-----+

Githubに生成されたpublic keyを登録する

Githubにログイン>右上アイコン>Settings>SSH and GPG keysにアクセス。
New SSH keyから、生成されたid_personal_rsa.pubの中身をまるっと登録。

Githubへのssh-keyの登録画面
Githubへのssh-keyの登録画面

登録の結果、以下のようになる。

sshkeys-regist

configファイルを作成

.sshフォルダに「config」という名前のファイルを作成する。

ローカルからGithubにpushする際、remoteのURLに指定したユーザーアカウントに応じ、ssh-keyを使い分ける必要がある。
どのssh-keyを利用するのかを指定しておくのが、このconfigファイルである。

以下の内容でconfigファイルを作成する。

Host github #任意のホスト名
  HostName github.com
  IdentityFile ~/.ssh/id_personal_rsa #メインアカウントの鍵のファイル
  User git
  Port 22
  TCPKeepAlive yes
  IdentitiesOnly yes

Githubとの接続確認

以下を実行すると、public keyの登録などが正しくできたかが確認できる。

ssh -T github

結果、以下のようになればOK。

Hi (username)! You've successfully authenticated, but GitHub does not provide shell access.

ローカルのGitプロジェクトのremote-urlを設定する。

対象プロジェクトに対し、以下のコマンドを実行する。

git remote set-url origin git@github:Githubユーザー名/sample-app.git

@後の「github」部分がconfigファイルで指定したホスト名になるようにする。

pushしてみる

$ git push origin master
Enumerating objects: 23, done.
Counting objects: 100% (23/23), done.
Delta compression using up to 4 threads
Compressing objects: 100% (21/21), done.
Writing objects: 100% (23/23), 51.48 KiB | 554.00 KiB/s, done.
Total 23 (delta 2), reused 0 (delta 0), pack-reused 0
To github:username/sample-app.git
 * [new branch]      master -> master

できた!