YAZY blog

Learn & Write

Git : 1台の Mac から複数の GitHub アカウントを使ってそれぞれのリポジトリに push するための設定手順書

仕事にもプライベートにも使っている Mac 端末で、それぞれの GitHub アカウントを使ってそれぞれのリポジトリに push したいシーンがあったので、この設定方法を試してみた。

結果的にうまくいったので、設定手順をまとめておく。

1. ssh コマンドで認証情報を確認

既に CLI を使って git push などを行なっている場合には、現在の GitHub の認証情報を確認しておく。

 ~ ssh -T git@github.com

Hi Mr.A! You've successfully authenticated, but GitHub does not provide shell access.

ちなみに -T オプションをつけないと以下のように、上の場合よりログが多く出力される。-T オプションの意味は「仮想端末の割り当てを禁止する」ということらしい。

ssh - UNIX/Linuxコマンド - IT専科

 ~ ssh git@github.com

PTY allocation request failed on channel 0
Hi Mr.A! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.

2. 新しい SSH キーを生成

ターミナルを開いて以下のコマンドを実行。(your_email@example.com は自分のメールアドレスに置き換える)

 ~ ssh-keygen -t ed25519 -C "your_email@example.com"

Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/your_name/.ssh/id_ed25519): /Users/your_name/.ssh/github/id_personal
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/your_name/.ssh/github/id_personal
Your public key has been saved in /Users/your_name/.ssh/github/id_personal.pub
The key fingerprint is:
SHA256:9JNkLiZz14RJ9zyGmvzHqthm5pyvnt6IaS4626v2JqA your_email@example.com
The key's randomart image is:
+--[ED25519 256]--+
(中略)
+----[SHA256]-----+

~/.ssh/github というディレクトリをあらかじめ作ってあったので今回はそこに新しい鍵を生成した。

ちなみにこのときにディレクトリ指定に ~ を使うと Saving key "~/.ssh/github/id_personal" failed: No such file or directory というエラーが出てしまうので、パスは明示的に指定する必要がある。

対象のディレクトリには既に使用している鍵と今回作った鍵の2つがある状態。

 ~/.ssh/github ls -l

total 32
-rw-------  1 your_name  staff  2610  9 30  2021 id_work
-rw-r--r--  1 your_name  staff   573  9 30  2021 id_work.pub
-rw-------  1 your_name  staff   464  8  2 08:28 id_personal
-rw-r--r--  1 your_name  staff   109  8  2 08:28 id_personal.pub

3. SSH キーを ssh-agent に追加

ssh-agent とは「ssh 接続時に認証をサポートしてくれるツール」で、ssh-add コマンドを使って秘密鍵を登録しておけば、ssh 接続時にパスフレーズを入力しなくても秘密鍵を使って公開鍵認証をサポートしてくれる

生成した秘密鍵を追加するためには、まずバックグラウンドで ssh-agent を開始する。

 ~ eval "$(ssh-agent -s)"

Agent pid 32942

次に ssh-add コマンドを使って生成した秘密鍵ssh-agent に追加する。

 ~ ssh-add -K ~/.ssh/github/id_personal

WARNING: The -K and -A flags are deprecated and have been replaced
         by the --apple-use-keychain and --apple-load-keychain
         flags, respectively.  To suppress this warning, set the
         environment variable APPLE_SSH_ADD_BEHAVIOR as described in
         the ssh-add(1) manual page.

Enter passphrase for /Users/your_name/.ssh/github/id_personal:
Identity added: /Users/your_name/.ssh/github/id_personal (your_name@example.com)

-K オプションを指定したら WARNING が出た。非推奨になったので、今後は --apple-use-keychain オプションを使う必要があるようだ。

設定したパスフレーズを入力したら、 Identity added の文言が出て追加は完了した。

4. GitHub アカウントへの新しい SSH キーの追加

SSH 公開鍵をクリップボードにコピーして、GitHub の「Settings」のメニューから該当箇所に貼り付ける。

 ~ pbcopy < ~/.ssh/github/id_personal.pub

Settings メニューを開くとなんとなくわかるので、ここでは省略。

困ったときや詳細な手順は以下のリンクを見る。

https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account#adding-a-new-ssh-key-to-your-account

5. ssh config の設定

次に ssh の config ファイルを開いて、今追加したリポジトリの情報を入力する。

 ~ vim ~/.ssh/config

仕事用のは すでに github-work として登録してあるものとする。

Host github-work
  User git
  Port 22
  HostName github.com
  IdentityFile ~/.ssh/github/id__work
  TCPKeepAlive yes
  IdentitiesOnly yes
  UseKeychain yes
  AddKeysToAgent yes

# 以下を追加

Host github-personal
  User git
  Port 22
  HostName github.com
  IdentityFile ~/.ssh/github/id_personal
  TCPKeepAlive yes
  IdentitiesOnly yes
  UseKeychain yes
  AddKeysToAgent yes

これで設定は完了。

6. ssh で認証情報を確認

ssh -T を使って認証されているか確認してみる。

 ~ ssh -T github-personal

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

これでプライベート用のアカウントで無事認証されていることが確認できた。

7. 対象のプロジェクトに git remote を設定

最後に git remote add して対象の git リポジトリを追加する。その際に、ホスト名部分を ssh config に追記したホスト名にする。

# 本来は "git@github.com:yazy22/your_project.git"
 ~ cd your_project
 ~ git remote add origin github-personal:yazy22/your_project.git
 ~ git remote -v

origin  github-personal:yazy22/your_project.git (fetch)
origin  github-personal:yazy22/your_project.git (push)

8. 対象のプロジェクトの git のユーザー情報を変更

最後に対象のプロジェクトで使用する git のユーザー名とメールアドレスを仕事用のものから個人用のものに書き換えておく。

 ~ git config --global user.name
Mr.A

 ~ git config --global user.email
your_business_email@example.com

 ~ git config --local user.name "YAZY"
 ~ git config --local user.email "your_name@example.com"

9. コミットしてユーザー名とメールアドレスを確認

最後に実際にコミットしてログに残るユーザー名とメールアドレスを確認

 ~ git commit . -m 'some message'

[main 2258e77] some message
 1 file changed, 3 insertions(+)
 ~ git log

commit 2258e7742bb1fa09650efb7d6e9d272f80976c71 (HEAD -> main)
Author: YAZY <your_name@example.com>
Date:   Tue Aug 2 09:06:02 2022 +0900

    some: message

ちゃんと個人用の GitHub アカウントの情報でコミットできていることが確認できた。