在PowerShell中使用带密码短语的SSH密钥操作Git时遇认证提示问题
我太懂这种明明配置好了ssh-agent却还是反复弹密码提示的烦躁了!既然你已经确认了agent启动、环境变量正确、GitHub连接测试通过,那咱们从几个容易被忽略的点入手排查:
先确认ssh-agent真的加载了你的密钥
别光看agent激活了,得实打实确认密钥在列表里。在PowerShell里跑一下ssh-add -l,看看输出里有没有你GitHub SSH密钥的指纹。要是没看到,手动执行ssh-add ~/.ssh/你的密钥文件名(比如ssh-add ~/.ssh/id_ed25519),加载完再试试Git命令,说不定就解决了。给Git指定明确的SSH密钥配置
有时候Git会乱尝试不同的密钥,导致agent没匹配上。在~/.ssh目录下新建个config文件(没有就直接创建),写入以下内容:Host github.com IdentityFile ~/.ssh/你的密钥文件名 IdentitiesOnly yesIdentitiesOnly yes这个配置很关键,它会强制Git只用你指定的这个密钥,不会瞎试其他的,避免和agent的密钥池混淆。排查Windows上的ssh-agent服务版本
Windows有两套ssh-agent:OpenSSH官方服务和Git自带的。要是混用了就容易出问题。你可以重置一下服务:- 先停掉当前agent:
Stop-Service ssh-agent - 设置成自动启动:
Set-Service -Name ssh-agent -StartupType Automatic - 重新启动:
Start-Service ssh-agent
之后重新加载密钥,再测试Git操作。
- 先停掉当前agent:
让Git使用系统的OpenSSH客户端
Git默认可能用自己打包的ssh.exe,和系统的agent不兼容。你可以把Git的SSH命令指向系统版本:git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"配置完后,Git就会调用系统的ssh,和你启动的agent完美配合了。
延长ssh-agent的密码缓存时长
要是缓存时间太短,过一会儿就又要输密码。你可以设置个长一点的缓存时间,比如一天:ssh-add -t 86400 ~/.ssh/你的密钥文件名86400是秒数,也就是24小时,这样一天内都不用重复输密码了。
内容的提问来源于stack exchange,提问作者Dennie de Lange

