为啥 ssh 不要求时 git 要求输入密钥密码?

Posted

技术标签:

【中文标题】为啥 ssh 不要求时 git 要求输入密钥密码?【英文标题】:Why does git asks for key passphrase when ssh does not?为什么 ssh 不要求时 git 要求输入密钥密码? 【发布时间】:2021-11-24 13:16:19 【问题描述】:

我已经浏览了几个关于为什么 git 每次都要求输入 SSH 密钥密码的问答,但我还没有找到一个可以描述我的情况的问答。让我的情况不同的是,我已经成功创建了一个 ssh 密钥,将其添加到代理中,并且代理正在运行。所以当我跑步时:

ssh -T git@github.com

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

令人困惑的是,在 powershell 中,当我导航到与该帐户关联的 git repo 并运行如下 git 命令时:

cd ~/mygitrepo
git fetch

我被邀请到Enter passphrase for key 'C:\Users\me\.ssh\github'

如果我输入密码,我可以成功地从 repo 中获取。

为什么在运行git 命令时要求我输入密码,而在运行ssh 命令时却没有?

额外细节

我正在运行 Windows 10,在 Windows 终端中使用 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

【问题讨论】:

Git 自带自己的ssh; Windows 10 还带有 自己的 ssh。您的两个不同的 ssh 安装无法相互通信。如果您的 Windows ssh 能够满足 Git 需要的一切(可能是,不确定这一点,因为我不使用 Windows,但 Windows 10 可能足够新)您可能只是想说服 Git 使用 Windows ssh。跨度> (在这种特殊情况下,我认为 Git ssh 正在寻找不同的代理,导致需要密码。)在环境中设置 GIT_SSH_COMMAND,或在全局 Git 配置中设置 core.sshCommand ,应该解决这个问题。 太棒了,@torek 我无法告诉你我在这个问题上花了多少时间,你找到了原因。 【参考方案1】:

当您运行 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"
...

【讨论】:

以上是关于为啥 ssh 不要求时 git 要求输入密钥密码?的主要内容,如果未能解决你的问题,请参考以下文章

Capistrano 在部署时要求输入密码,尽管有 SSH 密钥

TortoiseGit尝试推送时要求我输入密码

SSH 密钥要求在启动代理后输入密码

SSH 密钥设置但仍要求输入密码(但不是用于第二、第三等会话)

Windows SSH 要求输入密码

gitlab ssh-key 不生效问题,ssh push需要密码