OS:Windows
ターミナル:VSCodeの標準ターミナル(PowerShell)
全体の流れ
- PCのユーザー直下に.sshフォルダを作成
- アカウントごとに鍵を作る(例:プライベート用と会社用の2本)
- 公開鍵をGitHubに登録する(それぞれのアカウントに)
- .ssh/config で設定を書く(どのリポジトリではどの鍵を使うか指定)
- リポジトリを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 keys → New 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アカウントに自動で接続してくれるようになります。
コメント