メインコンテンツへスキップ

SSHキーでコミットに署名できない(VSCode Windows10)

··2 分

GitHubがSSHキーでの署名に対応した。さっそく手順に従ってやってみたが、VSCodeでコミットしようとしたところ"Load Key …… invalid format?“というエラーが出た。ちなみにWindows10 64bit環境だ。

ssh-agentが原因か #

SSHキーで署名するには、ssh-addコマンドでssh-agentに秘密鍵を登録しておく必要がある。どうも、このssh-agentが上手く動いていないようだ。Git Bashでssh-agentを起動してからコミットすると成功した。

$ eval "$(ssh-agent -s)"
Agent pid 1756
$ git commit -m "test"

またPowerShellでstart-ssh-agentを実行してからコミットすると成功した。しかしVSCodeでのコミットはできなかった。

>start-ssh-agent
Found ssh-agent at 2032
Found ssh-agent socket at /tmp/ssh-zXYew0aNfq6e/agent.1739
>git commit -m "test"

Gitのログを見てみると、ssh-keygenが実行されている。これとssh-agentとの連携が上手くいっていないようだ。なおプライバシーのためログは一部修正してある。

> $env:GIT_TRACE=1
> git commit -m "test"
exec-cmd.c:237          trace: resolved executable dir: C:/Program Files/Git/mingw64/bin
git.c:460               trace: built-in: git commit -m test
run-command.c:654       trace: run_command: ssh-keygen -Y sign -n git -f 
'~\AppData\Local\Temp/.git_signing_key_tmpMJtPQZ' '~\AppData\Local\Temp/.git_signing_buffer_tmpJ2wJuc'
error: Load key 
"~\\AppData\\Local\\Temp/.git_signing_key_tmpMJtPQZ": invalid format?

Windows 付属の OpenSSHを使う #

解決策はWindowsに付属しているOpenSSHを使うことだ。そのための準備として、「サービス」アプリからOpenSSH Authentication Agentを設定する。スタートアップを自動にして、サービスを開始する。PowerShellでssh-addコマンドが実行できれば成功だ。

次にGItでWindows付属のssh-keygenを使うように設定する。これでssh-agentとの連携が上手くいく。

git config --global gpg.ssh.program "C:/Windows/System32/OpenSSH/ssh-keygen.exe"

無事にVSCodeでコミットに署名できた。

別の解決策として、Gitを再インストールして"Use external OpenSSH"を選択すればWindows付属のOpenSSHが使われるようになる。

Gitのセットアップ画面.png

参考 #