为什么在使用 SSH 时不需要密钥密码,但在 Git 中需要?

3

我查看了几个有关为什么git每次都要求SSH密钥密码的问答,但是没有一个描述了我的情况。我的情况与众不同的是,我已成功创建了一个SSH密钥,并将其添加到代理中,代理正在运行。所以当我运行以下命令时:

ssh -T git@github.com

我立即看到成功消息“您已成功验证,但 GitHub 不提供 shell 访问权限。”它没有要求输入密码。

令人困惑的是,在 powershell 中,当我导航到与该帐户相关联的 git 存储库时,并运行像这样的 git 命令:

cd ~/mygitrepo
git fetch

当我运行git命令时,会要求我输入密钥' C:\ Users \ me \ .ssh \ github '的密码。

如果我输入了密码,我就可以成功地从存储库获取数据。

为什么在运行git命令时会要求我输入密码,但是在运行ssh命令时不需要?

额外细节

我正在运行Windows 10,在Windows Terminal中使用PowerShell。我每天都使用ssh连接到各种远程主机,它从未要求输入密码。

来自~ / .ssh / config的片段

Host github.com
    HostName github.com
    User git
    IdentityFile C:\Users\me\.ssh\github

来自~/mygitrepo/.git/config的代码片段

[remote "origin"]
    url = git@github.com:myuser/myrepo.git

1
Git自带其自己的ssh;Windows 10也自带其自己的ssh。你安装的这两个不同的ssh无法相互通信。如果你的Windows ssh能够完成Git所需的所有操作(很可能可以,但我不使用Windows,不确定),你可能只需要让Git使用Windows ssh即可。 - torek
1
在这种情况下,我认为Git ssh正在寻找不同的代理,从而需要输入密码。在环境中设置GIT_SSH_COMMAND或在全局Git配置中设置core.sshCommand应该可以解决这个问题。 - torek
太棒了,@torek,我无法告诉你我花了多少个小时来解决这个问题,而你找到了原因。 - Kit Johnson
1个回答

4

当你运行git命令时,默认使用其自带的ssh版本,但它无法与Windows ssh-agent通信。

查找Windows正在使用的二进制文件:

Powershell> where.exe ssh
CMD> where ssh

对我来说结果是 C:\Windows\System32\OpenSSH。现在通过在全局 .gitconfig 文件中设置以下行来强制 git 使用该二进制文件:

[core]
    sshCommand = "C:/WINDOWS/System32/OpenSSH/ssh.exe"
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接