🤔

【GitHub】複数GitHubアカウントのSSHキーを管理する。

2021/07/28に公開

発生した問題

個人用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 pullgit pushなどのコマンドを実行した際に毎度パスフレーズを尋ねられることになる。

非常にめんどくさいので、パスフレーズをキーチェーンに保存してスムーズに開発できるようにします。

詳細は、「SSH キーを ssh-agent に追加する」を確認してください。

  1. バックグラウンドでssh-agentを開始します。
eval "$(ssh-agent -s)"
  1. SSH 秘密鍵を ssh-agent に追加して、パスフレーズをキーチェーンに保存します。
ssh-add -K ~/.ssh/id_rsa_github_work
  1. パスフレーズを尋ねられるので入力します。

終わりに

以上で、GitHubのアカウントを複数利用する際の設定方法でした。

本来であれば、GitHubのアカウントは1つで運用した方がされているのでプライベートアカウントでシングルサインオン設定などをするのが良いみたいですね。

GitHub - B. アカウント利用規約

プライベートのGitはGitLabなどを使うのも一つの手かもしれません。

Discussion