在 Cygwin 上使用 SSH 的 Git:克隆时权限被拒绝(公钥),但 ssh -T [email protected] 有效

在 Cygwin 上使用 SSH 的 Git:克隆时权限被拒绝(公钥),但 ssh -T [email protected] 有效

我在 Windows 10 机器上配置 cygwin 以使用带有 ssh 密钥的 git 时遇到了麻烦。

我从他们的网站安装了 cygwin 的最新版本(安装版本 2.925)并添加/确保了包 gcc、git(git、git gui、git svn、gitk)、make、vim 和 openssh。

我为我的 cygwin 实例配置了密钥,就像我之前在其他机器上所做的那样(包括在同一台 Windows 机器上运行正常的 MSYS2 设置):

  • 生成新密钥
  • 确保代理正在运行
  • 将密钥添加到代理
  • 将密钥添加到 github 并授权我的组织
  • 测试输出如下:ssh -T [email protected]
Hi <user>! You've successfully authenticated, (...)

但是,当我通过 ssh 进入git clonerepo 时,我无法访问它:

$ git clone [email protected]:<org>/<repo>.git
Cloning into <repo>...
[email protected]: Permission denied (publickey)
...

我不确定如何解决这个问题,因为对我来说,似乎我已经正确配置了一切,因为它能够ssh直接进行身份验证。

这让我想问以下问题:

  • 是否有可能是我没有正确配置密钥,但在测试时仍然以某种方式收到了该身份验证消息ssh
  • 是否有可能在运行过程中发生的任何事情git clone最终都缺少与我运行时终端可用的相同环境变量ssh
  • 即使 MSYS2 和 MSYS2 不是同时运行的,那么 MSYS2 设置是否也可能导致问题?

我尝试过的一些方法:

  • 检查 Windows 机器上没有运行其他版本的 git
  • 根据我在其他帖子/文章中看到的建议,从 cygwin 添加/删除各种 git 包
  • 手动添加~/.ssh/config内容文件
Host github.com
    IdentityFile ~/.ssh/id_ed25519

编辑:

为了尝试查看运行过程中运行的 ssh 命令的更多输出,git clone我运行了git -c core.sshCommand="ssh -v" clone <repo address>,结果运行得很好。我首先尝试将其设置为 bash 变量,但没有成功(无论是克隆存储库还是获取更多输出):

$ bash
$ GIT_SSH_COMMAND="ssh -v"
$ git clone <repo>

这让我相信这确实是一些环境问题,无法传递到克隆过程中使用 ssh 命令的地方。仍然想知道这里的“真正”解决方案或为什么会发生这种情况的解释,希望这些额外的信息可以为某人指明更好的方向。

相关内容