前提と目的
仕事用とプライベートのGithubアカウントそれぞれを使い分けたい
SSHを複数作って両方に登録したけど
どちらかのアカウントのクローンしようとすると
有効なアドレスではないと怒られた
これを解決することができたので
問題が起こってた原因と対処方法を備忘録として記録
環境
- MacBook Pro (Retina, 13-inch, Early 2015)
- macOS Mojava 10.14.6
- Sourcetree 4.0.2
参考
- GitHubを複数のアカウントで利用するためのメモ
https://qiita.com/BlueEventHorizon/items/f9d81e3659ebce9e1ffc - ファイル名を指定してssh認証鍵を作成する
https://qiita.com/TanakanoAnchan/items/0b9b5e0b80aa86d324f5 - お前らのSSH Keysの作り方は間違っている
https://qiita.com/suthio/items/2760e4cff0e185fe2db9 - GitHub+SourceTreeで複数アカウント設定
https://blog.tanebox.com/archives/6/
要点
- SourcetreeからSSHクローンする時「git@github.com」を「git@[Host名]」にしてなかった
- キーチェーンに以前使ってた情報が保存されてしまっていた
設定手順
- SSHKeyを二種類作成
- SSHKeyをそれぞれのGithubに登録
- ./ssh/configにHost名を変えて設定
- git@での接続を有効化
- SourcetreeからSSHクローンする時「git@github.com」を「git@[Host名]」にする
[1] .SSHKeyを二種類作成
2種類のSSHKeyを作成
名前はなんでも良い。例として以下の通り。
- id_work_rsa: 仕事用
- id_private_rsa: プライベート用
ターミナルを開いて以下の手順で作成
# ./sshディレクトリに移動
cd ~/.ssh
# SSHkey作成(仕事用 id_work_rsa)
ssh-keygen -t rsa -f id_work_rsa -b 4096 -C [あなたのGitHubアカウントメールアドレス]
# パスフレーズを入力(パスフレーズは覚えておく)
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
# もう一度同じパスフレーズを入力
Enter same passphrase again:
# 以下色々表示されるけどこれで終わり
Your identification has been saved in id_work_rsa.
Your public key has been saved in id_work_rsa.pub.
# SSHkey作成(プライベート用 id_private_rsa)
ssh-keygen -t rsa -f id_private_rsa -b 4096 -C [あなたのGitHubアカウントメールアドレス]
# 以下仕事用の手順と同じ
これで./sshディレクトリには
以下の通りにファイルが作られている
config
id_work_rsa
id_work_rsa.pub
id_private_rsa
id_private_rsa.pub
known_hosts
[2] .SSHKeyをそれぞれのGithubに登録
仕事用とプライベート用のアカウントに
それぞれのためのポートを登録
- Setting > SSH and GPG keys を開く
- SSH keysの「New SSH Keys」をクリック
- Titleは自由、わかりやすくKey作成時のメールアドレスなど
- Keyは作成した公開鍵をターミナルでコピーして貼り付け
- 「Add SSH Keys」で登録完了
ターミナルでコピーする方法
# id_private_rsaの時も同じようにコピー
pbcopy < ~/.ssh/id_work_rsa.pub
[3] ./ssh/configにHost名を変えて設定
./ssh/configを開いて以下のように入力し保存
configがなければ作成
Host github-private
User git
Port 22
HostName github.com
IdentityFile ~/.ssh/id_private_rsa
TCPKeepAlive yes
IdentitiesOnly yes
UseKeychain yes
AddKeysToAgent yes
Host github-work
User git
Port 22
HostName github.com
IdentityFile ~/.ssh/id_work_rsa
TCPKeepAlive yes
IdentitiesOnly yes
UseKeychain yes
AddKeysToAgent yes
※ ポートの22はGitのSSH接続する時のポート番号
https://docs.github.com/ja/enterprise/2.19/admin/configuration/network-ports#エンドユーザーのためのアプリケーションポート
[4] git@での接続を有効化
登録したHostでSSH接続できるようにします
以下のコマンドを入力
ssh -T git@github-private
「fingerprints」に記載されているpublic keyと同じか確認して「yes」と入力Enter
https://docs.github.com/en/github/authenticating-to-github/githubs-ssh-key-fingerprints
The authenticity of host 'github.com (13.114.40.48)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])
以下の文言が出れば接続が成功
github-workも同じ手順で接続
Hi [あなたのGitUser名]! You've successfully authenticated, but GitHub does not provide shell access.
[5] SourcetreeからSSHクローン
Sourcetreeの「新規 > URLからクローン」する時
入力するソースURLの「git@github.com」を「git@[Host名]」にする
例)
ソースURL(SSH): git@github.com:[ユーザー名]/[リポジトリ名].git
仕事用 → git@github-work:[ユーザー名]/[リポジトリ名].git
プライベート用 → git@github-private:[ユーザー名]/[リポジトリ名].git
URLを入力するとパスフレーズを求められるので
SSHKeyを作成した時に設定したパスフレーズをそれぞれ入力する
これで両方のGitHubアカウントのSSHでのプルやプッシュが行えるようになる
※ パスフレーズを求められなかった場合
MACユーザーの場合キーチェーンにすでに
別のSSHのパスフレーズが登録されている可能性がある
その場合一度キーチェーンから削除する必要がある
「アプリケーション > キーチェーンアクセス」を起動して「GitHub」で検索
- github.com Access Key for [ユーザー名]
- github-private Access Key for [ユーザー名]
おそらく先にGit連携すると「github.com Access Key」で登録されてるはずなので
以前SourceTreeでSSHKeyを使った接続をしてた人は
この前に使ってたキーチェーンを削除
再度URLからクローンしようとすると
パスフレーズを要求されるはずなので、先の手順通り登録して完了