複数のGitHubアカウントにSSH接続しようの巻

プログラミング・技術系

どうも音又です。
今回は1つのコンピュータから複数のGitHubアカウントにSSH接続する方法を紹介します。
人によってはGitHubのアカウントを仕事用とプライベート用で分けており、同じコンピュータからそれぞれのリポジトリにアクセスできればと言った場面もあるかと思います。
ここで紹介するSSHの接続設定を行えばそういったニーズにも対応することができます。

SSH接続の設定については以下の記事でも細かく解説しているのでぜひ参考にしてください。

スポンサーリンク

既存の認証鍵の確認

SSH接続を行うにはSSHの認証鍵が必要になります。
この記事を見ている方は既にこちらの導入は済んでいるかと思いますが念の為確認しておきましょう。
GitHubへSSH接続するための認証鍵は大体以下のような名前で生成してることが多いです。

  • id_rsa.pub
  • id_ecdsa.pub
  • id_ed25519.pub

これらがあるかターミナル上で確認してみましょう。以下のようなコマンドを実行してみます。

ls -la ~/.ssh

実行するとSSH鍵の一覧が表示されるので先ほど紹介したファイル名に該当するものがないか確認してみてください。
これから別のアカウントへ接続するための認証鍵も新たに作りますので、既存の鍵の名前と被らないように該当する鍵のファイル名は覚えておいてください。

認証鍵の作成と設定

それでは実際に別のGitHubアカウント用の認証鍵の作成と登録を行っていきます。
といっても1度GitHubのSSH接続の設定をしている方はそのやり方をちょっと調整するだけなので分かる部分は軽く目を通すくらいでも構いません。

別のアカウント用の認証鍵の作成

まず認証鍵の作成です。ターミナルで以下のコマンドを実行します。

ssh-keygen -t ed25519 -C "another_mail@example.com" -f ~/.ssh/id_ed25519_sub

コマンドでやっていることとしては
ssh-keygen -t ed25519 -C "anoter_mail@example.com"までは普通にGitHubのSSH認証鍵を作る時とかわりません。
注意点としてはこのメールアドレスは識別しやすいように別のアカウントで使用しているメールアドレスにしとくと良いかと思います。

-f ~/.ssh/id_ed25519_another_subの部分では認証鍵を生成するディレクトリとファイル名を指定しています。
ここを設定することで任意の場所と名前で認証鍵を作ることが出来るので、既存の認証鍵の名前と競合することが防げます。
ただしディレクトリに関しては基本~/.ssh内に作ることが多いかと思うので、明確な理由がない限りは同じところを指定する方が良いです。(同じ認証鍵を使いまわしてコンピュータにSSH接続する際などに管理目的で別の場所に配置することもあります)
ファイル名に関してはわかりやすいものを指定すれば問題ありません。

認証鍵をGitHubに登録

認証鍵の登録は以下の記事を参考に登録したいGitHubアカウントに登録してください。

認証鍵を使い分けられるようにする

ここまで来たらあと少しです。
複数のアカウントに接続出来るようにするには接続時に各認証鍵に分岐させられるように設定をする必要があります。
まずその設定ファイルを以下のようなコマンドで開きます。

nano ~/.ssh/config

開くと既に設定されている項目があれば表示されます。
その下に追加する形で以下のように記述していきましょう。何もない場合も普通に記述していく形で大丈夫です。

# 元からある設定
Host...

# ビジネス用
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519

# プライベート用
Host github-sub
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_sub

Hostは設定項目の名前で自由に付けて問題ありませんが、後にこの名前を使って接続を行うので覚えやすい名前にすると良いです。
HostNameUserはGitHubへ接続してもらうための設定です。
IdentityFileは先程生成した認証鍵をそれぞれ振り分けるための設定です。名前を忘れた方は

ls -la ~/.ssh

で一覧から確認してください。

設定したものがちゃんと反映されているかテストしてみましょう。

# ビジネス用に接続
ssh -T git@github.com

# プライベート用にアクセス
ssh -T git@github-sub

無事接続ができれば以下のようなメッセージが表示されます。

Hi <それぞれのユーザー名>! You've successfully authenticated, but GitHub does not provide shell access.

これで設定が完了です。
ここでエラーが出る場合は設定ファイルやコマンドでタイポが無いかなど確認してください。

実際に接続してみる

では一通りの設定も終わったので、実際に接続してみましょう。
いつもGitHubに接続する場合は

git@github.com:<ユーザー名>/my-repo.git

のようなURLを使用するかと思います。
今回でいうと、ビジネス用のアカウントに接続する時はこのままでも構いません。

プライベート用のアカウントに接続する時はURLのgithub.comの部分を以下のように書き換えます。

git@github-sub:<ユーザー名>/example-repo.git

このようなURLを使用することで任意のアカウントへSSH接続が可能になります。

注意点

gitのユーザー設定をグローバルで設定していると、各アカウントへ接続していてもその名前でコミットなどが記録されてしまいます。
その為「本名を隠して運用してたGitHubアカウントでうっかり本名のユーザー名でコミットしまった!」なんてことも起こり得ます。
なのでその辺りが気になる方は、出来るだけグローバル設定をせずに、リポジトリ毎にローカルでユーザー設定をすることをオススメします。

GitHubの公式ドキュメントも要チェック

今回使用したSSH接続の設定などはGitHubの公式ドキュメントにも記載されている内容を扱っているのでより細かく知っておきたい方はこちらもチェックしておくとよいかと思います。

SSH を使用した GitHub への接続 - GitHub Docs
セキュリティで保護されていないネットワーク経由でセキュリティで保護されたチャネルを提供する Secure Shell プロトコル (SSH) を使用して、GitHub に接続できます。

おわり

今回は複数のGitHubアカウントにSSH接続する方法の紹介でした。
なかなかニッチなケースかもしれませんが、アカウントの管理で困っている方はぜひお試しください。
では今回はこのへんで。

コメント

タイトルとURLをコピーしました