GitHub を複数アカウントで使うことになり、アカウントを追加したところ——
クローンできない!😱
これまでのアカウントは HTTPS + Personal Access Token (PAT) で接続していました。
どうやら以下の理由により、この方式では複数アカウントを使うのが難しいようです。
-
https://github.com/に紐づく認証情報は 1つしか保存されない - 2つ目のアカウントで同じホストに接続しようとすると、既存の情報が上書きされてしまう
調べてみると、複数アカウントを使いたい場合は SSH + 公開鍵認証 を使うようです。
また、現在は GitHub の接続方法としても SSH が主流みたいです。
| 時期 | 主な認証方式 | GitHubの方針 |
|---|---|---|
| 〜2020年 | HTTPS + パスワード | デフォルト方式 |
| 2021年8月〜 | HTTPS + PAT | パスワード廃止、トークン必須 |
| 2022年〜現在 | SSH + 公開鍵 or HTTPS + PAT | SSHがより推奨・主流に |
というわけで、SSH を使用した GitHub への接続手順をまとめてみました。
SSH鍵が存在するか確認
ちなみに、すでにSSH鍵が作成されているかどうかは、次のディレクトリやコマンドで確認できます。
鍵は通常、C:\Users\<username>\.ssh に格納されています。
以下のコマンドを実行すると、ディレクトリ内にある鍵ファイルの一覧を表示できます。
# コマンドプロンプト
dir %USERPROFILE%\.ssh
# PowerShell
Get-ChildItem "$env:USERPROFILE/.ssh"
単一アカウントの登録
1. SSH鍵の作成
公開鍵(.pub)と秘密鍵(拡張子なし)のペアで1セットです。
GitHubの接続で利用するデフォルトの鍵ファイル名は以下となります。
デフォルトのファイル名だと後から見た時に何の鍵がわからなくなるので、変更をおすすめします。
ただし、デフォルトの鍵ファイル名以外を利用した場合は、後述する config ファイルに登録が必要です。
-
秘密鍵
- id_rsa
- id_ed25519
- id_ecdsa
-
公開鍵
- id_rsa.pub
- id_ed25519.pub
- id_ecdsa.pub
鍵の種類はセキュリティ・速度ともに優れる ed25519 を推奨します。
SSH鍵の作成は以下のコマンドを実行します。
# コマンドプロンプト
ssh-keygen -t ed25519 -C "<your_email@example.com>" -f "%USERPROFILE%\.ssh\<your-key-file-name>"
# PowerShell
ssh-keygen -t ed25519 -C "<your_email@example.com>" -f "$env:USERPROFILE\.ssh\<your-key-file-name>"
実行するとパスワードの設定を求められます。
設定しない場合は、そのままエンターを2回押してください。
設定する場合は、パスワードを2回入力します。
ssh-keygen -t ed25519 -C your_email@example.com
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\<username>/.ssh/id_ed25519): C:\Users\<username>/.ssh/<your-key-file-name>
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
入力が完了すると公開鍵と秘密鍵のペアが作成されます。
2. SSH設定ファイルの作成
鍵の名前をデフォルト以外にした場合は、設定ファイルに登録が必要です。
拡張子なしの config という名前のファイルを、C:\Users\<username>\.ssh に作成します。
ファイル名は必ず 拡張子なしの「config」 にしてください。
「config.txt」などと誤って保存されないよう注意してください。
記述する内容は以下となります。
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/<your-key-file-name> # %USERPROFILE%\.ssh\ と同義
IdentitiesOnly yes
3. GitHubに公開鍵を登録
3.1 公開鍵の内容をコピー
以下のコマンドを実行し、作成した公開鍵の内容を表示します。
出力された1行の文字列(ssh-ed25519 AAAA... your_email@example.com )をコピーします。
# コマンドプロンプト
type %USERPROFILE%\.ssh\<keyname>.pub
# PowerShell
Get-Content "$env:USERPROFILE\.ssh\<keyname>.pub"
3.2 GitHubに公開鍵を登録
作成した .pub ファイルの内容をGitHubに登録します。
GitHubの [SSH and GPG keys] ページで「New SSH key」をクリック
Add new SSH Keyページが開くので、以下を入力します。
- Title:任意の名前を入力
- Key type:Authentication Key(デフォルト)
- Key:先程コピーした公開鍵ファイル(.pub)の内容をペースト
4. SSHの接続確認
公開鍵が正常に登録できたか確認するために以下のコマンドを実行します。
ssh -T git@github.com
以下のメッセージが返ってきたら接続できています。
Hi <username>! You've successfully authenticated, but GitHub does not provide shell access.
5. Sourcetreeの設定変更
Sourcetreeは、初期設定では PuTTY(Plink/Pageant)形式 を利用してSSH接続をおこなっており、OpenSSH形式の鍵を使用する場合は、設定の変更が必要です。
OpenSSHに変更することで、ユーザーのSSH設定ファイルである
~/.ssh/config が有効 になり、複数アカウントや鍵の切り替えも柔軟に管理できるようになります。
5.1 公開鍵の登録
オプション > 全般 > SSHクライアントの設定
- SSHキー:GitHub 用に設定した秘密鍵ファイル(拡張子なし、
.pubではない方)を選択 - SSHクライアント:OpenSSH
5.2 アカウント設定
アカウントを新規追加、または既存アカウントの設定を以下のようにします。
- Host
- ホスティングサービス:GitHub
- 優先するプロトコル:SSH
- Credentials
- 認証:OAuth
- ユーザー名:「OAuthトークンを再読み込み」をクリックすると、ブラウザが起動しGitHub認証が実行され、ユーザー名が自動的に追加されます。
6. TortoiseGitの設定変更
TortoiseGitは、初期設定では PuTTY(Plink/Pageant)形式 を利用してSSH接続をおこなっており、OpenSSH形式の鍵を使用する場合は、設定の変更が必要です。
OpenSSHに変更することで、ユーザーのSSH設定ファイルである
~/.ssh/config が有効 になり、複数アカウントや鍵の切り替えも柔軟に管理できるようになります。
TortoiseGit → 設定 → ネットワーク → SSHクライアント
- 変更前
C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe - 変更後
C:\Windows\System32\OpenSSH\ssh.exe
7 リポジトリのクローン
SSH設定が完了したら、GitHub上のリポジトリをクローンして作業環境に取得します。
リポジトリのSSH URLは、GitHubのリポジトリページ → [Code] ボタン → 「SSH」タブ からコピーできます。
# SSH URL
git clone git@github.com:<repository>.git
複数アカウントの登録
GitHubで「業務用」と「個人用」など、複数アカウントを利用する場合、それぞれに対して別のSSH鍵を作成し、config ファイルで切り替えることで安全かつ確実に共存できます。
ここでは、業務用をデフォルト設定 とし、個人用を別ホストとして追加する構成で説明します。
| 用途 | アカウント名 | メールアドレス | 鍵ファイル名 |
|---|---|---|---|
| 業務用(デフォルト) | work | work@example.com | id_ed25519_work |
| 個人用 | personal | personal@example.com | id_ed25519_personal |
1 SSH鍵の作成
公開鍵(.pub)と秘密鍵(拡張子なし)のペアで1セットです。
鍵の種類はセキュリティ・速度ともに優れる ed25519 を推奨します。
それぞれのアカウント用にSSH鍵を作成します。
以下のコマンドを実行します。
# コマンドプロンプト
# 業務用(デフォルト)
ssh-keygen -t ed25519 -C "work@example.com" -f "USERPROFILE\.ssh\id_ed25519_work"
# 個人用
ssh-keygen -t ed25519 -C "personal@example.com" -f "USERPROFILE\.ssh\id_ed25519_personal"
# PowerShell
# 業務用(デフォルト)
Get-Content "$env:USERPROFILE\.ssh\id_ed25519_work"
# 個人用
Get-Content "$env:USERPROFILE\.ssh\id_ed25519_personal"
実行するとパスワードの設定を求められます。
設定しない場合は、そのままエンターを2回押してください。
設定する場合は、パスワードを2回入力します。
# 業務用(デフォルト)
ssh-keygen -t ed25519 -C work@example.com
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\<username>/.ssh/id_ed25519): C:\Users\<username>/.ssh/id_ed25519_work
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
# 個人用
ssh-keygen -t ed25519 -C personal@example.com
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\<username>/.ssh/id_ed25519): C:\Users\<username>/.ssh/id_ed25519_personal
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
入力が完了すると公開鍵と秘密鍵のペアが作成されます。
2 SSH設定ファイルの作成
複数の鍵を使い分けるため、設定ファイルに登録が必要です。
拡張子なしの config という名前のファイルを、C:\Users\<username>\.ssh に作成します。
ファイル名は必ず 拡張子なしの「config」 にしてください。
「config.txt」などと誤って保存されないよう注意してください。
記述する内容は以下となります。
Host github.com は1つしか設定できません。
デフォルトアカウント(ここでは業務用)を割り当て、それ以外のアカウントは別名(例:github-personal)を付けて管理します。
# 業務用アカウント(デフォルト)
Host github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
# 個人用アカウント
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
3 GitHubに公開鍵を登録
3.1 公開鍵の内容をコピー
以下のコマンドを実行し、作成した公開鍵の内容を表示します。
出力された1行の文字列(ssh-ed25519 AAAA... your_email@example.com )をコピーします。
# コマンドプロンプト
# 業務用(デフォルト)
type "USERPROFILE\.ssh\id_ed25519_work.pub"
# 個人用
type "USERPROFILE\.ssh\id_ed25519_personal.pub"
# PowerShell
# 業務用(デフォルト)
Get-Content "$env:USERPROFILE\.ssh\id_ed25519_work.pub"
# 個人用
Get-Content "$env:USERPROFILE\.ssh\id_ed25519_personal.pub"
3.2 GitHubに公開鍵を登録
作成したそれぞれの .pub ファイルの内容をGitHubに登録します。
GitHubの [SSH and GPG keys] ページで「New SSH key」をクリック
Add new SSH Keyページが開くので、以下を入力します。
- Title:
workまたはpersonal - Key type:Authentication Key(デフォルト)
- Key:公開鍵ファイル(.pub)の内容
4 SSHの接続確認
それぞれの公開鍵が正常に登録できたか確認するために以下のコマンドを実行します。
# 業務用(デフォルト)
ssh -T git@github.com
# 個人用
ssh -T git@github-personal
それぞれ以下のメッセージが返ってきたら接続できています。
# 業務用(デフォルト)
Hi work! You've successfully authenticated, but GitHub does not provide shell access.
# 個人用
Hi personal! You've successfully authenticated, but GitHub does not provide shell access.
5. Sourcetreeの設定変更
Sourcetreeは、初期設定では PuTTY(Plink/Pageant)形式 を利用してSSH接続をおこなっており、OpenSSH形式の鍵を使用する場合は、設定の変更が必要です。
OpenSSHに変更することで、ユーザーのSSH設定ファイルである
~/.ssh/config が有効 になり、複数アカウントや鍵の切り替えも柔軟に管理できるようになります。
5.1 公開鍵の登録
オプション > 全般 > SSHクライアントの設定
SSHキーのファイル選択画面は複数ファイルを選択できないためパスを直接入力します。
それぞれの秘密鍵ファイルのパスをセミコロン「;」区切りで記述します。
C:\Users\<username>/.ssh/id_ed25519_work;C:\Users\<username>/.ssh/id_ed25519_personal
- SSHキー:それぞれの秘密鍵ファイルのパスをセミコロン「;」区切りで記述
- SSHクライアント:OpenSSH
5.2 アカウント設定
アカウントを新規追加、または既存アカウントの設定を以下のようにします。
- Host
- ホスティングサービス:GitHub
- 優先するプロトコル:SSH
- Credentials
- 認証:OAuth
- ユーザー名:「OAuthトークンを再読み込み」をクリックすると、ブラウザが起動しGitHub認証が実行され、ユーザー名が自動的に追加されます。
6. TortoiseGitの設定変更
TortoiseGitは、初期設定では PuTTY(Plink/Pageant)形式 を利用してSSH接続をおこなっており、OpenSSH形式の鍵を使用する場合は、設定の変更が必要です。
OpenSSHに変更することで、ユーザーのSSH設定ファイルである
~/.ssh/config が有効 になり、複数アカウントや鍵の切り替えも柔軟に管理できるようになります。
TortoiseGit → 設定 → ネットワーク → SSHクライアント
- 変更前
C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe - 変更後
C:\Windows\System32\OpenSSH\ssh.exe
7 リポジトリのクローン
SSH設定が完了したら、GitHub上のリポジトリをクローンして作業環境に取得します。
リポジトリのSSH URLは、GitHubのリポジトリページ → [Code] ボタン → 「SSH」タブ からコピーできます。
# 業務用リポジトリをクローンする場合(デフォルト設定)
git clone git@github.com:<repository>.git
# 個人用リポジトリをクローンする場合
git clone git@github-personal:personal/<repository>.git
-
デフォルト設定(
Host github.com)に登録した業務用アカウントは、
GitHub上でコピーしたSSHのURL(例:git@github.com:<repository>.git)をそのまま使用できます。 -
個人用アカウントなど、別の鍵を使う場合は、
configファイルで設定したホスト名(例:github-personal)を指定します。
(例:git@github-personal:personal/<repository>.git)
8 リポジトリURLの変更
既存のリポジトリを別アカウントのSSH鍵で利用する場合や、クローン後に接続先を切り替える場合は、git remote set-url コマンドでリモートURLを変更します。
# 業務用(デフォルト設定)
git remote set-url origin git@github.com:<repository>.git
# 個人用
git remote set-url origin git@github-personal:personal/<repository>.git
変更が正しく反映されたか確認するには以下を実行します。
git remote -v



