エンジニアのみなさま、日々の学習本当にお疲れ様です!
また本記事まで足を運んでいただき本当に感謝です。
約3分程度で読めるので最後まで読んでもらえると幸いです。
はじめに
「複数のGitHubアカウントのSSH管理」を設定するにあたって理解が足りていない箇所があり、情報収集も少し手こずったため、備忘も兼ねて手順をまとめてみました。
前提
- Macの操作手順
- 既にGitHubアカウントAで秘密鍵・公開鍵が設定されている
- 秘密鍵ファイル名:id_ed25519
- 公開鍵ファイル名:id_ed25519.pub
- ssh用のconfigファイルは既に作成されている
- GitHubアカウントBの秘密鍵・公開鍵は未設定
- GitHubにて「アカウントBの登録」と「リモートリポジトリの登録」は出来ている
- リモートリポジトリに紐付けるローカルリポジトリも存在する
- 管理したいGitHubアカウントBのメールアドレスは「hoge@fuga.hoge」、秘密鍵のファイル名は「id_ed25519-account-b」とする
手順
①アカウントB用の公開鍵と秘密鍵を作成する
ssh-keygen -t ed25519 -C "your_email@example.com" -f <秘密鍵のファイル名>
# 今回のケースの場合
ssh-keygen -t ed25519 -C "hoge@fuga.hoge" -f id_ed25519-account-b
-fをつけない場合「id_ed25519」と「id_ed25519.pub」ファイルが生成されます。
今回の場合は既に上記2ファイルが存在するため、上書きしても良いか聞かれます。
必ず-fをつけてGitHubアカウントB用の秘密鍵・公開鍵ファイルを作成しましょう。
以下のコメントが表示されるので、Enterを押します。
> Enter a file in which to save the key (/Users/YOU/.ssh/id_ALGORITHM): [Press enter]
以下のコメントが表示されるので「Enter2回」 もしくは 「好きなパスフレーズを2回入力」します。セキュリティを強化するには後者を選択しましょう。
> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
以下コマンドでファイルが生成されているかを確認します。
cd ~/.ssh
ls
# GitHubアカウントA用のファイル
id_ed25519 id_ed25519.pub
# 以下2ファイルが新たに生成される
id_ed25519-account-b id_ed25519-account-b.pub
②SSH キーをssh-agentに追加する
$ eval "$(ssh-agent -s)"
> Agent pid <ランダムな値が生成される>
上記コマンド後、以下コマンドでconfigファイルを開き、GitHubアカウントB用の設定を追加します
open ~/.ssh/config
# GitHubアカウントA用の設定
Host github-account-a
HostName github.com
AddKeysToAgent yes
UseKeychain yes
IdentityFile ~/.ssh/id_ed25519
# 以下、GitHubアカウントB用の設定を追加する
+ Host github-account-b
+ HostName github.com
+ User git
+ AddKeysToAgent yes
+ UseKeychain yes
+ IdentityFile ~/.ssh/id_ed25519-account-b
上記、GitHub用Bの設定を追加後、catコマンドで生成したファイルの中身を確認してみましょう。
cd ~/.ssh
cat id_ed25519-account-b
-----BEGIN OPENSSH PRIVATE KEY-----
<秘密鍵の内容が記載されている>
-----END OPENSSH PRIVATE KEY-----
id_ed25519-account-bファイルの内容をssh-agent に追加して、パスフレーズをキーチェーンに保存します。
ssh-add --apple-use-keychain ~/.ssh/id_ed25519-account-b
③GitHubアカウントBへSSH キーを追加する
以下コマンドで公開鍵ファイル(id_ed25519-account-b.pub)の内容をコピーします。
pbcopy < ~/.ssh/id_ed25519-account-b.pub
コピー後、GitHubアカウントBにある「Settings」をクリックする
手順① ~ ⑤を実施する
④リモートリポジトリの接続先を確認する
cd <対象のローカルリポジトリまで移動する>
# リモートリポジトリを確認する
git remote -v
# ssh/configで設定したHost名に変更する
git remote set-url origin github-account-b:<GitHubアカウント名>/<対象のリポジトリ名>
⑤SSHの疎通を確認する
cd <対象のローカルリポジトリまで移動する>
# リモートリポジトリを確認する
ssh -T github-account-b
> Hi <GitHubアカウント名>! You've successfully authenticated, but GitHub does not provide shell access.
さいごに
今回はSSH関連の理解を深める事ができました。
GitHubアカウント単体のSSH設定に関しては、GitHub公式の手順通り進めれば難なくできそうです。
この投稿が誰かの一助になれば幸いです...!
さいごまでご覧いただきありがとうございました!
参考記事
おまけ
唐突ですが弊社のご紹介もさせてください。
▼ コーポレートサイト
▼ Wantedly求人
弊社メンバーは学習した内容を日々Qiitaの記事にアウトプットしております。
弊社にご興味のある方、まずは求人を見てみてください!
ご応募お待ちしておりますー!