git - 为什么 git 要求输入 key 密码而 ssh 不要求?

标签 git ssh windows-10

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

ssh -T git@github.com

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

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

cd ~/mygitrepo
git fetch

我被要求Enter passphrase for key 'C:\Users\me\.ssh\github'

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

为什么我在运行 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 ssh-agent 通信。

找出二进制 Windows 使用的是什么:

Powershell> where.exe ssh
CMD> where ssh

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

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

关于git - 为什么 git 要求输入 key 密码而 ssh 不要求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69430465/

相关文章:

git - 如何添加另一个 git 存储库的子目录?

java - 在 linux 脚本中运行远程 java 服务器

git - 如何使用文本编辑器编辑 ~/.git/config 文件?

ssh - Shell脚本可使用密码自动进行SSH登录

c# - SplitView.PaneClosed 事件可用但不适用于 PaneOpened

git - 即使为 Git 指定了 X 键,Ubuntu 也会不断 pop 一个屏幕,询问另一个键 Y 的密码。为什么?

git - Visual Studio 中的默认 Git 提交消息

go - 无法获取套餐

git - Bitbucket 文档在撒谎

Go Unicode 组合字符(字素簇)和 MS Windows 控制台 cmd.exe