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が使われるようになる。