GitHubの複数アカウントをSSHで使い分ける方法
はじめに
GitHubを日常的に使うにあたって、次のような場面に遭遇します。
- GitHubで複数アカウント(仕事用と個人用)を使い分けたい
- どちらのアカウントでもリポジトリの作成やPushを行いたい
- でも、認証エラーや混乱でPushできない…
そんなときに便利なのが SSH鍵によるアカウントの切り替え運用 です。
HTTPS経由の接続は一見シンプルですが、2段階認証やトークンの扱いで混乱しがちです。
一方でSSH接続を使えば、秘密鍵・公開鍵のペアを適切に管理するだけで、安全かつスムーズに認証が行えます。
本記事では以下をゴールとしています。
- 複数のSSH鍵を用意し、それぞれのGitHubアカウントに対応させる
-
~/.ssh/config
を使ってアカウントごとの設定を明確に切り分ける - リポジトリごとに正しいアカウントでPushできるようにする
1. SSH鍵の作成
まずは、それぞれのGitHubアカウントに対応する**SSH鍵ペア(秘密鍵と公開鍵)**を作成します。
ここでは以下の2つの鍵を用意する例で進めます:
- 仕事用アカウント →
id_ed25519_work
- 個人用アカウント →
id_ed25519_personal
# 仕事用
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_work -C "your_work_email@example.com"
# 個人用
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_personal -C "your_personal_email@example.com"
-t ed25519
:より安全で高速な鍵タイプ(推奨)
-f ~/.ssh/xxx
:ファイル名を指定して上書きを防止
-C
:GitHubのUIで識別しやすくするためのコメント
ここで、SSH鍵のタイプは固定ではなく選べるのですが、現在推奨されているのがed25519との事でした。
✅鍵の種類と違い
鍵の種類 | 特徴 | 長所 | 短所 |
---|---|---|---|
ed25519 |
楕円曲線暗号(EdDSA)を使用 | 高速・安全・鍵が短い | 古いOSでは非対応な場合あり(レア) |
rsa |
最も広く使われてきた | 互換性が高い | 鍵が長く、速度やセキュリティでやや劣る |
ecdsa |
楕円曲線だが非推奨 | 短くて高速 | 実装に不安があるため非推奨とされることが多い |
それぞれのコマンド実行後、以下のようなファイルが ~/.ssh/ に生成されます
🔹仕事用鍵(id_ed25519_work を作成した場合)
ファイル名 | 用途 | 内容 |
---|---|---|
~/.ssh/id_ed25519_work |
秘密鍵(Private Key) | ローカルでのみ使用。絶対に外部に出さない! |
~/.ssh/id_ed25519_work.pub |
公開鍵(Public Key) | GitHub に登録する。誰に見せてもOK。 |
🔹個人用鍵(id_ed25519_personal を作成した場合)
ファイル名 | 用途 | 内容 |
---|---|---|
~/.ssh/id_ed25519_personal |
秘密鍵(Private Key) | ローカルで使用。第三者には渡さないこと! |
~/.ssh/id_ed25519_personal.pub |
公開鍵(Public Key) | GitHub(個人アカウント)に登録する。 |
2. GitHubへの公開鍵の登録
作成した公開鍵(.pub
ファイル)を、それぞれのGitHubアカウントに登録していきます。
ここでは例として以下の公開鍵を登録します:
- 仕事用:
~/.ssh/id_ed25519_work.pub
- 個人用:
~/.ssh/id_ed25519_personal.pub
🔹公開鍵の内容をコピーする
まずは、登録したい鍵の内容を確認します:
cat ~/.ssh/id_ed25519_personal.pub
実行すると、以下のような文字列が1行で出力されます(内容は人によって異なります):
ssh-ed25519 AAAAC3NzaC1lZD... your_email@example.com
この文字列全体をコピーし、GitHubに登録していきます。
[Profile Icon] → Settings → SSH and GPG keys
または直接アクセス:
👉 https://github.com/settings/keys
上記から「New SSH key」ボタンをクリック
Title:分かりやすい名前をつけます(例:My Laptop (Personal))
Key:先ほどコピーした公開鍵を貼り付け
最後に「Add SSH key」をクリックすれば完了です!
✅登録が完了すると?
対応する 秘密鍵が存在する環境から、GitHubにSSH接続できるようになります。
このあと、~/.ssh/config を設定すれば、アカウントごとの切り替え運用が可能になります。
次は、SSH接続をアカウントごとに使い分けるための ~/.ssh/config の設定方法を見ていきましょう。
~/.ssh/config
の設定
3. SSH鍵を複数用意しても、そのままでは GitHub 側がどの鍵を使うべきか判断できません。
そのため、~/.ssh/config
ファイルに設定を追加し、アカウントごとの接続先(ホスト)を明示的に分ける必要があります。
以下がサンプルコードになります。
# 仕事用 GitHub アカウント
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
# 個人用 GitHub アカウント
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
✅~/.ssh/config の設定項目一覧
項目名 | 意味・説明 |
---|---|
Host |
任意のホスト名。git@ホスト名: として使用される(例: github-work ) |
HostName |
実際の接続先ホスト名(GitHubの場合は常に github.com ) |
User |
SSHログインユーザー名。GitHubでは常に git を指定 |
IdentityFile |
使用するSSH秘密鍵のパス(例: ~/.ssh/id_ed25519_work ) |
IdentitiesOnly |
指定した鍵だけを使用させる。他の鍵を試行しない。yes を推奨 |
4. 既存リポジトリのリモートURLを切り替える
HTTPS → SSH の切り替えから、Push成功確認までの流れについてです
🔹現在のリモートURLを確認する
まずは、今どのURLが設定されているかの確認です
git remote -v
出力されたURLで見分けることができます。
🔹SSH形式に変更する
SSH形式に切り替えるには、次のように git remote set-url
を使います
# 個人用アカウントでSSH接続する場合
git remote set-url origin git@github-personal:ホスト名/リポジトリ名.git
# 仕事用アカウントでSSH接続する場合
git remote set-url origin git@github-work:ホスト名/リポジトリ名.git
変更が行われたかの確認はgit remote -v
です。
任意でSSH接続確認を行うこともあります。
ssh -T git@github-personal
ここまで設定できれば、実際に push してみましょう。
パスワード入力なしでPushが出来るようになれば、SSH設定の完了です!
5. よくあるエラーと対処法
エラー内容 | 原因と対策 |
---|---|
Permission denied (publickey) |
GitHubに公開鍵が登録されていない、または鍵が間違い |
Could not resolve hostname github-xxx |
~/.ssh/config にその Host が未定義 |
fatal: Could not read from remote repository |
リモートURLの指定ミスやアクセス権限がない場合 |
おわりに
💡本記事のポイント
- SSH鍵はアカウントごとに分けて作成しよう
-
~/.ssh/config
を使えば、ホスト名ごとに鍵を使い分けできる -
git remote
をSSH形式に切り替えることで、push/pullがスムーズになる - 認証エラーが起きたら、設定ファイルと公開鍵登録を見直そう
✅今後に向けて
- GitHubだけでなく、GitLabやBitbucketにも同様のSSH運用が可能です
- 複数環境(自宅PC・会社PC・CI)で同じ構成を維持するために、設定をドキュメント化しておくのがおすすめです
SSHを使ったGitの運用は、慣れればとても快適です。個人的なナレッジの共有ではありますが、アカウントが増えても落ち着いて対処できるよう、この記事が参考になれば幸いです!
Discussion