You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 04:53:29