devAlice
← Windows

Windows の Git 認証 — Credential Manager・SSH・コミット署名

Windows で Git 認証をスムーズに:Git Credential Manager、SSH キー、SSH 署名、マルチアカウント。

Windows の Git 認証は macOS / Linux より少し複雑だ — Git Credential Manager(GCM)、OpenSSH、1Password エージェントが衝突することがある。このガイドは一度きりのクリーンなセットアップで、1 年間触らなくて済む状態を作る。

対象:Windows 11 + Git for Windows + GitHubWindows 初期セットアップ 完了後)。

TL;DR

  1. Git Credential Manager(GCM) — HTTPS クローン用 OAuth(ブラウザサインイン)
  2. OpenSSH キー — SSH クローン用。Ed25519 推奨
  3. コミット署名 — SSH キーを使用(GPG より簡単)
  4. 仕事・個人の分離Include.path または ~/.ssh/config のホストエイリアス
  5. 1Password SSH エージェント(オプション)— ボルト内にキーを保管

前提条件

  • Git for Windows 2.40 以上 — winget install --id Git.GitWindows 初期セットアップ
  • OpenSSH クライアント有効化済み(Win11 デフォルト)— Get-WindowsCapability -Online -Name "OpenSSH.Client*" で確認

1. Git Credential Manager — HTTPS

GCM は Git for Windows に同梱されている。HTTPS クローン / プッシュ時にブラウザで OAuth フローが自動起動する:

git clone https://github.com/user/repo.git
# ブラウザが開く → GitHub ログイン → トークンが自動保存される

保存場所:Windows Credential Manager(コントロールパネル → ユーザーアカウント → 資格情報マネージャー → Windows 資格情報)。

確認

git config --global credential.helper
# manager

manager と表示されれば GCM が有効。そうでない場合:

git config --global credential.helper manager

マルチアカウント(仕事 + 個人 GitHub)

URL ごとに異なるヘルパーを設定:

git config --global --add credential.https://github.com.useHttpPath true

同一ホスト上のパスごとに資格情報が分かれる。

2. SSH キー

SSH は HTTPS よりスムーズ(ブラウザ不要)。Ed25519 キーを生成する:

ssh-keygen -t ed25519 -C "you@example.com"
# パス:~/.ssh/id_ed25519(デフォルト)
# パスフレーズ:推奨(1Password エージェントが自動ロック解除)

公開鍵を表示:

Get-Content ~/.ssh/id_ed25519.pub
# ssh-ed25519 AAAA... you@example.com

GitHub → Settings → SSH and GPG keys → New SSH key → 公開鍵を貼り付ける。

ssh-agent の有効化(パスフレーズの自動ロック解除)

# 管理者 PowerShell
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
 
# 通常の PowerShell
ssh-add ~/.ssh/id_ed25519
# 初回のみパスフレーズ入力;以降は自動

SSH の確認

ssh -T git@github.com
# Hi yourname! You've successfully authenticated, but GitHub does not provide shell access.

リモート URL の切り替え(HTTPS → SSH)

git remote set-url origin git@github.com:user/repo.git

3. SSH によるコミット署名

GPG より簡単で同じキーを再利用できる。Git 2.34 以上が必要。

git config --global gpg.format ssh
git config --global user.signingkey "ssh-ed25519 AAAA... you@example.com"
git config --global commit.gpgsign true
git config --global tag.gpgsign true

user.signingkey には公開鍵の行全体を指定する。ファイル参照も可能:

git config --global user.signingkey "C:/Users/me/.ssh/id_ed25519.pub"

GitHub への署名キー登録

GitHub → SSH and GPG keys → Add new SSH key → キータイプを Signing Key にして同じ公開鍵を登録する。

テスト

git commit --allow-empty -m "test signed"
git log --show-signature -1
# Good "git" signature with ED25519 key SHA256:...

PR ページで「Verified」バッジを確認する。

allowed_signers ファイル(ローカル検証に必要)

~/.config/git/allowed_signers

you@example.com ssh-ed25519 AAAA...
coworker@example.com ssh-ed25519 BBBB...
git config --global gpg.ssh.allowedSignersFile "$HOME/.config/git/allowed_signers"

git log --show-signature で他メンバーのコミットも検証できるようになる。

4. GitHub マルチアカウント(仕事 + 個人)

4.1 SSH config — ホストエイリアス

~/.ssh/config

Host github.com-personal
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_personal
  IdentitiesOnly yes

Host github.com-work
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_work
  IdentitiesOnly yes

クローン:

git clone git@github.com-personal:personal-user/repo.git
git clone git@github.com-work:company/repo.git

4.2 フォルダごとの user.email — includeIf

~/.gitconfig

[user]
    name = Your Name
    email = personal@example.com
 
[includeIf "gitdir:C:/Users/me/work/"]
    path = C:/Users/me/.gitconfig-work

~/.gitconfig-work

[user]
    email = me@company.com
    signingkey = ssh-ed25519 AAAA... me@company.com

C:/Users/me/work/ 以下のリポジトリでは仕事用のメール / キーが自動的に使われる。

確認:

cd C:\Users\me\work\some-repo
git config user.email
# me@company.com
 
cd C:\Users\me\personal\some-repo
git config user.email
# personal@example.com

5. 1Password SSH エージェント(オプション)

パスワードマネージャー を参照。Windows では環境変数でエージェントソケットを設定する:

  1. 1Password デスクトップ → Settings → Developer → 「Use the SSH agent」✅
  2. SSH キーを 1Password ボルトに保存 + GitHub に登録
  3. PowerShell $PROFILE
    $env:SSH_AUTH_SOCK = '\\.\pipe\openssh-ssh-agent'
  4. 新しいターミナル → ssh -T git@github.com → Windows Hello を 1 度

これで SSH とコミット署名がディスク上の ~/.ssh/id_* プレーンテキストなしで動作する。

6. 検証

  1. ssh -T git@github.com — 認証 OK
  2. git clone git@github.com:you/repo.git — パスフレーズ不要(または生体認証 1 回)
  3. git commit --allow-empty -m test && git log --show-signature -1 — 「Good signature」
  4. GitHub の PR に「Verified」バッジが表示される
  5. 仕事・個人フォルダで git config user.email の値が異なる

トラブルシューティング

ssh: connect to host github.com port 22: Connection timed out

社内ファイアウォールがポート 22 をブロックしている。SSH over 443 を使う:

# ~/.ssh/config
Host github.com
  HostName ssh.github.com
  Port 443

Permission denied (publickey)

  • キーファイルのパーミッション — icacls ~/.ssh/id_ed25519 /inheritance:r /grant:r "$($env:USERNAME):(R)"
  • 公開鍵が GitHub に登録されていない

GCM が無効

git config --global credential.helper manager
git config --global credential.helperSelector prompt

1Password SSH エージェントが検出されない

  • デスクトップアプリが起動・サインイン済みで Developer オプションが ON
  • SSH_AUTH_SOCK の正確な値(\\.\pipe\openssh-ssh-agent
  • 競合:OpenSSH エージェントサービスが起動していると、そちらのソケットが優先される。Stop-Service ssh-agent または無効化

コミット署名が「Unverified」になる

  • SSH キーを GitHub の signing key として登録する(認証キーとは別)
  • git config --global gpg.format ssh が未設定
  • キーが破損 — 再生成 + 再登録

includeIf が効かない

  • Git 2.36 以上が必要(旧バージョンの Git for Windows はサポートなし)
  • gitdir パスは末尾に / が必要(C:/Users/me/work/
  • Windows でも \ ではなく / を使う

参考リンク

更新履歴

  • 2026-05-12:初稿。GCM + SSH キー + SSH 署名 + マルチアカウント + 1Password エージェント + 6 つのトラブルシューティング。