最近Windowsをリセットして,ある程度クリーンな状態になったのでOpenPGPを導入し,ついでにSSH認証もGPG認証鍵で横着できればいいかなーと思っていたら,いろいろ詰まったので記事にします.
環境
- Windows 11 Education 25H2
- Gpg4Win を導入済み
- 認証ロールがついている秘密鍵を保持している
OpenSSH Authentication Agent を止める
Windows設定から追加機能でOpenSSH関連を入れた場合は,OpenSSH Authentication Agent が動いてるかもしれません.こいつは gpg-agent と競合してしまうので,事前にkillしておきます.
Stop-Service ssh-agent -ErrorAction SilentlyContinueSet-Service ssh-agent -StartupType Disabled #ついでに無効化.管理者権限が必要gpg-agent.conf に書き込み
SSHサポートもやってくれという設定を,%APPDATA%\gnupg\gpg-agent.conf に書きます.~/.gnupg/gpg-agent.conf ではありませんので,Linux流儀の人はお気をつけて.
enable-ssh-supportenable-win32-openssh-supportTIPenable-win32-openssh-support は,Microsoft純正のssh.exeと連携するためにつけるフラグです.Windowsだとssh-agentへのアクセス方法がバラバラらしく,下記3つに分かれるようです:
- Cygwin/MSYS方式 (enable-ssh-support) … 疑似UNIXソケットを作る.UNIX/Linux流儀とほぼ同じ
- PuTTY/Pageant方式 (enable-putty-support) … Pageantのフリをするらしい.WinSCPなどと連携できるようです.
- Win32-OpenSSH方式 (enable-win32-openssh-support) … 名前付きパイプを作る.
今回は3番のWin32-OpenSSH方式を採っていますが,お使いの宗派によっては別のものを選んだほうがいいかもしれません.
sshcontrol に書き込み
GPGエージェントに差し出させる認証鍵のKeygripを gpg --list-keys --with-keygrip で探し,%APPDATA%\gnupg\sshcontrol に1行1鍵で書きます.
WARNING最後に改行がないとうまく動きません. 下記コードブロックでは改行がないですが,ファイルの最後には改行を入れてあげましょう.私はそれで半日溶かしました.
10B289794B0FCD2B39B7EEEC6E3961021CDD146D設定を反映させる
gpgconf --kill gpg-agentgpgconf --launch gpg-agentちゃんと出てくるか確認
ssh-add -L で,意図通りに鍵が出てきたらOKです.
PS> ssh-add -Lssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN6XaqdkcQF6fkQGjFV15eQjkqe4PoWOR32Vdu8bpF7X (none)(必要な人) Windows起動時にエージェントを起動する
デフォルトで自動起動してくれないらしいので,下記コマンドでスタートアップスクリプトを作ります.
$startup = [Environment]::GetFolderPath('Startup')Set-Content -Path "$startup\launch-gpg-agent.cmd" -Value "gpgconf --launch gpg-agent" -Encoding ascii結論
Windowsはクソ
参考
一部の情報は古い可能性があります









