情况
我在 Windows 下使用 Git 2.34,并GIT_SSH_COMMAND
设置为 Windows OpenSSH 实现(它也设置在 上PATH
)。我想将新的 Git SSH 密钥提交签名功能与 ssh-agent 结合使用。
我将我的 ed25519 密钥添加到 ssh-agent 并ssh-add -L
打印正确的密钥。根据该输出,我将其用于.gitconfig
:
[commit]
gpgsign = true
[gpg]
format = ssh
[user]
signingkey = ssh-ed25519 mykeyhere
当尝试签署提交时,出现以下错误消息:
error: Load key "C:\\Users\\myuser\\AppData\\Local\\Temp/.git_signing_key_tmp8eWdG0": invalid format?
fatal: failed to write commit object
我验证了的内容.git_signing_key_tmp8eWdG0
是正确的(也是无 BOM 的 UTF-8)。我用它调试了 Git GIT_TRACE=1
,它显示它使用了此命令行,从而产生了错误:
run-command.c:668 trace: run_command: ssh-keygen -Y sign -n git -f 'C:\Users\myuser\AppData\Local\Temp/.git_signing_key_tmp8eWdG0' 'C:\Users\myuser\AppData\Local\Temp/.git_signing_buffer_tmp8eWdG0'
但是,从上面的调试输出(一个ssh-keygen
)手动执行相同的命令是有效的:
C:\>ssh-keygen -vvv -Y sign -n git -f C:\Users\myuser\AppData\Local\Temp/.git_signing_key_tmp8eWdG0 test.txt
Signing file test.txt
debug2: hash_file: hashed 4 bytes
debug3: hash_file: final hash: ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff
Write signature to test.txt.sig
因此我很好奇,删除了 OpenSSH,PATH
然后重新运行提交过程,尽管ssh-keygen
它不再可用,但它仍然显示签名错误:
C:\>where ssh-keygen
INFO: Could not find files for the given pattern(s).
这证明 Git 正在使用一些ssh-keygen
似乎与 Windows OpenSSH 二进制文件不兼容的命令(它将按所示工作),但我找不到 Git 正在使用的这个二进制文件,也找不到修改所使用的二进制文件的方法(即使GIT_SSH_COMMAND
设置正确并用于推送等所有其他目的)。
cmd.exe
我在和上遇到了这个问题powershell.exe
。我没有使用 Git bash。
问题
- 我该如何解决我的问题?
- 我怎样才能找出哪个
ssh-keygen
Git 正在使用? - 我怎样才能改变
ssh-keygen
正在使用的 Git? - 如何获得更详细的错误输出?
答案1
找到解决方案(讨论在 GitHub 上):