无法通过 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 变量