为啥 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 密钥