如何避免Git签署提交/标签时索要SSH签名密钥的密码?
Git SSH签名反复要求输入密码的解决办法
核心问题分析
Git的core.sshCommand仅控制远程拉取/推送等操作的SSH客户端,而SSH签名(commit/tag)使用的SSH程序由单独配置控制。如果Git默认使用自带的OpenSSH(而非Windows系统版),会无法共享Windows ssh-agent中的密钥缓存,导致每次签名都要输密码;另外SSH配置中的IdentitiesOnly yes全局规则也会阻止SSH自动从agent中选取签名密钥。
分步解决
1. 强制Git签名使用Windows系统OpenSSH
Git 2.34及以上版本支持单独配置SSH签名的程序,执行以下命令设置:
git config --global gpg.ssh.program "C:/Windows/System32/OpenSSH/ssh.exe"
该配置专门针对SSH签名场景,确保调用系统版OpenSSH,从而访问系统ssh-agent中的缓存密钥。
2. 调整SSH配置避免干扰签名
全局IdentitiesOnly yes会强制SSH仅使用指定的IdentityFile,但签名是本地操作,不需要匹配远程Host,因此会导致SSH无法从agent中自动获取签名密钥。修改C:/Users/<username>/.ssh/config:
# 移除全局的IdentitiesOnly yes,仅给github.com配置该规则 Host github.com IdentitiesOnly yes IdentityFile C:/Users/<username>/.ssh/id_ed25519_github
3. 确认签名密钥已正确加入ssh-agent
执行以下命令查看已加载的私钥指纹:
ssh-add -l
若签名密钥不在列表中,手动添加(输入一次密码后会被agent缓存):
ssh-add C:/Users/<username>/.ssh/id_ed25519_github_signing
同时确保Windows的OpenSSH Authentication Agent服务处于运行状态(可通过services.msc查看并设置为自动启动)。
4. 测试签名效果
执行空提交测试是否还需输入密码:
git commit --allow-empty -m "测试SSH签名免密"
内容的提问来源于stack exchange,提问作者Fabian
相关产品推荐
相关产品推荐

