複数のGitHubアカウントを使う場合の自動切り替え設定

OS:Windows

ターミナル:VSCodeの標準ターミナル(PowerShell)

全体の流れ

  1. PCのユーザー直下に.sshフォルダを作成
  2. アカウントごとに鍵を作る(例:プライベート用と会社用の2本)
  3. 公開鍵をGitHubに登録する(それぞれのアカウントに)
  4. .ssh/config で設定を書く(どのリポジトリではどの鍵を使うか指定)
  5. リポジトリをcloneするときに指定したHost名を使う(自動で切り替わる)

PCのユーザー直下に.sshフォルダを作成

まず、GitHubアカウントの分岐を管理するフォルダを作成します。

以下コマンドか、直接「C:/ユーザー/[ユーザー名]/」の場所に.sshというフォルダを作ってください。

# ホームディレクトリに移動
cd ~

# .sshフォルダがなければ作成
mkdir -p ~/.ssh

これは、プロジェクトとかGitアカウントとか関係なく、1つのPCに一つの.sshフォルダを作る感じです。

その中に、複数のGitHubアカウントの情報を記載して分岐させます。

アカウントごとに鍵を作る(例:プライベート用と会社用の2本)

SSHキーとは?

SSHキーは 自分のPCとGitHubの間を安全に接続するための「鍵」 です。

実体はただのテキストファイルで、

  • 秘密鍵(id_ed25519)
  • 公開鍵(id_ed25519.pub)

というペアで動きます。

秘密鍵はPCに保存、公開鍵はGitHubに登録して「このPCは本人のものです」と証明します。

以下のコマンドをターミナルで打って、それぞれの鍵を作成します。

# 1つめのアカウント(プライベート用)のカギを作成
ssh-keygen -t ed25519 -C "private@example.com" -f $env:USERPROFILE\.ssh\id_ed25519_private

# 2つめのアカウント(会社用)のカギを作成
ssh-keygen -t ed25519 -C "company@example.com" -f $env:USERPROFILE\.ssh\id_ed25519_company

※上記はPowerShellでコマンドを打つ場合です。

メールアドレスの箇所はそれぞれのアドレスに変えてください。

ちなみに「ed25519」というのは暗号方式の種類の一種で、セキュリティ強度が高く、かつ軽い方式です。

コマンドを打つと以下の2つが聞かれますが、何も入力せずエンターでOK

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

これで .ssh フォルダに以下ができます:

  • id_ed25519_private(秘密鍵)
  • id_ed25519_private.pub(公開鍵)
  • id_ed25519_company
  • id_ed25519_company.pub

公開鍵をGitHubに登録する(それぞれのアカウントに)

それぞれのGitHubアカウントにて、以下の場所にいきます。

右上のアイコン → Settings → SSH and GPG keysNew SSH key

そこに公開鍵 (.pub ファイル) の中身をコピーして貼り付けます。

中身は.pubファイルをメモ帳で開くか、下記コマンドで閲覧できます。

#priveteキーの中身を見る場合
Get-Content ~/.ssh/id_ed25519_private.pub

Key typeはデフォルトの「Authentication Key」でいいです。

Signin Keyの方は共同編集時に厳密に署名を残す場合にのみ、選ぶ選択肢になります。

「Add SSH Key」を押すとメール認証をやらされるので、対応してください。

これを両方のアカウントで行えば、認証設定は完了です。

.ssh/config で設定を書く(どのリポジトリではどの鍵を使うか指定)

.sshフォルダの直下(秘密鍵と同じ階層)に「config」という拡張子ナシのファイルを作成します。

そのファイル内に以下を記載

# private (プライベートGitHubアカウント)
Host github-private
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_private
  IdentitiesOnly yes
  AddKeysToAgent yes

# company (会社のGitHubアカウント)
Host github-company
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_company
  IdentitiesOnly yes
  AddKeysToAgent yes

それぞれを「github-private」「github-company」というニックネームで登録しました。

これにより、それぞれのニックネームで一度接続したリポジトリは、以降そのアカウントでの接続が保たれるようになります。

【テスト】

ターミナルで以下のコマンドを打ち込んでください。

ssh -T github-private

初回のみ
「This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?」
という確認が入るので、「yes」と打ってエンターを押します。

「Hi ○○! You’ve successfully authenticated, but GitHub does not provide shell access」

と出てきたら、接続成功です。

リポジトリをcloneするときに指定したHost名を使う(自動で切り替わる)

さて、それでは実運用でどのように使うか見ていきます。

GitHubでプロジェクトだけ作り、ローカルでもリポジトリ用のフォルダだけ作った状態を想定

ローカルの作業フォルダまで移動し、cloneします。
GitHubでプロジェクトを作ると「https://github.com/sample-MyApp/Aproject.git」のような
GitHubのドメイン/アカウント名/リポジトリ名みたいなURLが発行できると思います。

上記のURLが発行できた場合、cloneのコマンドは以下のようにします。

git clone git@github-private:sample-MyApp/Aproject.git .

つまり
「git clone git@SSHで指定したホスト名:GitHubアカウント名/リポジトリ名」
という書き方になります。

成功すれば、以降はVSCodeでこのフォルダを開くだけで、最初に設定したGitHubアカウントに自動で接続してくれるようになります。

コメント

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