【GitHub】複数GitHubアカウントのSSHキーを管理する。
発生した問題
個人用GitHubアカウントと社用GitHubアカウントを使い分けなくてはならない機会があった。
ssh鍵を登録しようとしたところ、以下のように怒られた。
key is already in use
「このssh鍵すでに使われてるよ」とのことだ。
GitHubでは同一のssh鍵を複数アカウントで扱うことができないらしい。
ということだったのでGitHub Docsを参考に以下の手順で環境を整えていきます。
実装手順
- 案件用GitHubアカウントに紐づけるためのssh鍵の準備
- sshの鍵の読み込み分け設定
- Githubに公開鍵を登録する
- ssh接続確認
- クローンorリモートURLを設定する
- パスフレーズを設定した場合の追加対応
ssh鍵の準備
新しい SSH キーを生成するの手順にしたがって鍵を作成します。
.sshフォルダでssh-keygen
コマンドを叩いてssh鍵を作成します。
cd ~/.ssh
ssh-keygen -t ed25519 -C "your_email@example.com" -f "id_rsa_github_work"
※ id_rsa_github_work の部分には、作成したい鍵の名前を記述します。
これにより、入力したメールアドレスをラベルとして使用して新しい SSH キーが作成されます。
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
パスフレーズの入力が求められるので必要であれば入力してください。
一応、未入力でも大丈夫です。
sshの鍵の読み込み分け設定
次に~/.ssh/config
に読み分けの記載をします。config
ファイルがまだない場合は作成してください。
Host github.com.work # 案件用アカウント
HostName github.com
User git
Port 22
IdentityFile ~/.ssh/id_rsa_github_work # 案件用アカウントの鍵
TCPKeepAlive yes
IdentitiesOnly yes
IdentityFile 項目に、アカウントで使用する秘密鍵のパスを指定します。
Githubに公開鍵を登録する
今回作成した公開鍵をGithubに登録します。
案件用アカウントでGithubにログインして、[Settings] -> [SSH and GPG keys] -> [New SSH key] または [Add SSH key]で作成した公開鍵を登録します。(詳細はこちらを参照)
クリップボードに公開鍵をコピーしておくと楽です。
# クリップボードに公開鍵をコピー
pbcopy < ~/.ssh/id_rsa_github_work.pub
ssh接続確認
config
ファイルに登録したHostで、正しくssh接続ができることを確認します。
ssh -T git@github.com.work
パスフレーズを登録した場合は、秘密鍵のパスフレーズを聞かれるので入力してください。
正常に接続確認ができると、以下のようなメッセージが返ってきます。
Hi {yourname}! You've successfully authenticated, but GitHub does not provide shell access.
クローンorリモートURLを設定する。
cloneする場合
git clone git@github.com.work:username/repository-name.git
通常、git@github.com
のところgit@github.com.work
のようにconfigファイルで設定したHost名に置き換えてクローンを実行する。
リモートURLを変更する場合
git remote set-url origin git@github.com.work:username/repository-name.git
クローンする時と同様にgit@github.com
のところgit@github.com.work
のようにconfigファイルで設定したHost名に置き換えて実行する。
パスフレーズを設定した場合の追加対応
パスフレーズを設定した場合、リモートリポジトリに対してアプローチを実施するgit pull
やgit push
などのコマンドを実行した際に毎度パスフレーズを尋ねられることになる。
非常にめんどくさいので、パスフレーズをキーチェーンに保存してスムーズに開発できるようにします。
詳細は、「SSH キーを ssh-agent に追加する」を確認してください。
- バックグラウンドでssh-agentを開始します。
eval "$(ssh-agent -s)"
- SSH 秘密鍵を ssh-agent に追加して、パスフレーズをキーチェーンに保存します。
ssh-add -K ~/.ssh/id_rsa_github_work
- パスフレーズを尋ねられるので入力します。
終わりに
以上で、GitHubのアカウントを複数利用する際の設定方法でした。
本来であれば、GitHubのアカウントは1つで運用した方がされているのでプライベートアカウントでシングルサインオン設定などをするのが良いみたいですね。
プライベートのGitはGitLabなどを使うのも一つの手かもしれません。
Discussion