无法通过 Git for Windows 使用/调试 SSH 身份验证

Posted

技术标签:

【中文标题】无法通过 Git for Windows 使用/调试 SSH 身份验证【英文标题】:Can't use/debug SSH auth with Git for Windows 【发布时间】:2021-11-14 01:54:26 【问题描述】:

我在 Windows 10 上使用 Git for Windows,我使用 GitExtensions 作为我的 GUI。为了对各种 Git 存储库进行身份验证,我使用 putty/pageant 并将我的密钥加载到其中。 GitExtensions 不知何故适用于此。最近,我在https://gitlab.example.com 遇到了一个 Git 存储库,GitExtensions 尝试在其中执行 git clone 并告诉我:fatal: protocol error: bad line length character: git@ 我还尝试使用 gitbash 手动进行克隆。当我尝试手动调用git clone 时,git bash 会要求我输入git@gitlab.example.com 的密码。我现有的带有已加载密钥的选美会话被忽略了。

我不知道如何调试或问题是什么。以下是我目前的发现:

GitExtensions 没有 git 日志记录,因此他们的 fatal: protocol error: bad line length character: git@ 神秘消息没有告诉我任何信息,而且我无法查看返回的整个错误。 Windows 版 Git 会忽略我的 putty/pageant 键,并继续尝试在 .ssh 目录中查找键。 如果我用plink.exe 的路径创建系统环境变量GIT_SSH,Git 会忽略它。它一直在.ssh dir 中寻找密钥。 当我在cmd 中运行set GIT_SSH 时,它会打印出:GIT_SSH=C:\Program Files (x86)\GitExtensions\PuTTY\plink.exe。 当我在 git bash 中运行 set GIT_SSH 时,它会打印出: 。 当我在 git bash 中运行 export 时,它会列出变量并列出具有正确值的 GIT_BASH 变量。我不确定这意味着什么。

所以目前我有一台安装了 Git 的 Windows 机器,但我无法使用 putty/pageant SSH 集成连接到存储库。我什至无法看到错误,因为 Git 或 GitExtensions 都不允许我看到错误消息,而且 Git 不会使用我的 putty/pageant SSH 密钥进行身份验证。

我怀疑 GitExtensions 尝试通过 pageant.exe 使用 SSH 密钥,但服务器拒绝它并以 git@gitlab.example.com password: 之类的内容进行响应,并且 GitExtensions 引爆,因为它不知道如何处理它。

我也不明白为什么 Windows 中的 gitbash 不使用正在运行的 pageant.exe 实例来获取 SSH 密钥。根据这个论坛上的几十个帖子,应该通过简单地设置GIT_SSH环境变量来完成,但在我的情况下不会发生。

我该如何进行?

【问题讨论】:

请注意,在 bash 中(就 using 而言,它只是“bash”;git-bash 只是意味着它是某人的 bash port Windows,包含在 Git 发行版中),set GIT_SSH 不设置 GIT_SSH,它设置位置参数。 set one two three$1 设置为 one$2 设置为 two,并将 $3 设置为 three。要查看 GIT_SSH 设置的内容,请使用echo $GIT_SSH 我避免使用 Windows,但我知道 modern Windows 有自己的 ssh,而 Git-for-Windows 带有 its 自己的 ssh 所以它可以在较旧的 Windows 版本上运行,现在这会导致无尽的痛苦,因为两个 ssh 版本的差异足以导致无尽的痛苦。 :-) 我怀疑您在这里对 Git 扩展的看法是正确的,它正在尝试使用一个并获取另一个,或者其他什么。 在 bash 中,要设置和导出 GIT_SSH(作为任何特定值),请使用 export GIT_SSH=<value>。如果 <value> 有任何 shell 元字符(空格、制表符、星号、引号等),请小心,因为 bash 本身会尝试解释元字符。您需要使用引号(单引号或双引号,具体取决于上下文),例如 export GIT_SSH="C:/path with space/to/program" 可能有效。 恐怕我听不懂。 GIT_SSH 环境变量在 Window 中设置。我不太明白export GIT_SSH 的用途。我不需要 git 在任何地方导出任何东西,我需要它来使用变量并使用 putty 而不是其他任何东西。 以上只是关于使用bash的一般cmets。如果事情已经正确设置,那很好:我只是说如果你想查看 GIT_SSH 设置为,不要运行 set GIT_SSH in bash,它不会做任何有用的事情。 【参考方案1】:

如果您的 Windows 是最新的 Windows 10,则不再需要 pagent/putty。

只需确保您的 %PATH% 包含 Git for Windows 随附的打包 OpenSSH。

在 CMD 中测试它:

set PATH=C:\Program Files\Git\bin;C:\Program Files\Git\cmd;C:\Program Files\Git\usr\bin;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\mingw64\libexec\git-core;%PATH%
where ssh
set GIT_SSH=

第二个命令应该打印C:\Program Files\Git\usr\bin\ssh.exe。 第三个应该为空GIT_SSH

从该 CMD 重试您的 SSH URL。 只需键入bash,您就可以从该 CMD 打开一个 bash。 (保留在同一个 CMD 中以继承您的 %PATH% 更改)。

如果您有旧的 putty SSH 密钥,请使用以下命令重新生成新的(仍然来自该 CMD):

ssh-keygen -t rsa -P "" -f ~/.ssh/myKey1

然后在~/.ssh/config

托管 myRepo1 主机名 /url/to/repo1 用户 git 身份文件 ~/.ssh/myKey1

测试它:

git ls-remote myRepo1

然后检查GitExtension documentation "Remotes/ OpenSSH and github",并尝试使用 OpenSSH 而不是 putty 密钥。

【讨论】:

谢谢,但我的所有密钥都与 putty 兼容,有很多,我想继续使用它。更重要的是,为什么 GitExtensions 能够使用 pageant 而我却不能?他们是怎么做到的? @masiton 不确定。我一年没用腻子键了。

以上是关于无法通过 Git for Windows 使用/调试 SSH 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Git for Windows 10 中永久设置 GIT_SSH 变量

使用 Github for Windows 通过 SSH 使用自己的私有 Git

如何使用git for windows上传文件到git仓库

如何使用git for windows上传文件到git仓库

如何使用git for windows上传文件到git仓库

如何使用git for windows上传文件到git仓库