我在Windows 10上使用GitExtensions,我使用GitExtensions作为我的图形用户界面。为了对各种Git存储库进行身份验证,我使用putty/pageant,并将密钥加载到其中。GitExtensions在某种程度上解决了这个问题。最近,我在https://gitlab.example.com遇到了一个Git存储库,GitExtensions在那里尝试执行git clone
,并告诉我:fatal: protocol error: bad line length character: git@
,我还尝试使用gitbash手动执行克隆。当我尝试手动调用git clone
时,git会问我git@gitlab.example.com
的密码。已加载密钥的现有选美会话将被忽略。
我不知道如何调试,也不知道问题是什么。以下是我目前的调查结果:
fatal: protocol error: bad line length character: git@
的神秘消息没有告诉我任何信息,我也无法看到返回的全部错误。.ssh
目录中查找键。GIT_SSH
的路径创建系统环境变量plink.exe
,那么Git就会忽略它。它一直在.ssh
dir中寻找密钥。cmd
中运行cmd
时,它会打印出:GIT_SSH=C:\Program Files (x86)\GitExtensions\PuTTY\plink.exe
。set GIT_SSH
时,它会打印出:export
时,它将列出变量,并列出具有正确值的GIT_BASH
变量。我不知道那是什么意思。因此,目前我有一台安装了Git的Windows机器,无法使用putty/pageant集成连接到存储库。我甚至无法看到错误,因为Git或GitExtensions都不会允许我查看错误消息,Git也不会使用我的putty/pageant SSH密钥进行身份验证。
我怀疑GitExtensions试图通过pageant.exe使用SSH密钥,但是服务器拒绝它,并使用类似git@gitlab.example.com password:
和GitExtensions之类的东西进行响应,因为它不知道如何处理它。
我也不明白为什么Windows中的gitbash不使用正在运行的pageant.exe实例来获取SSH密钥。根据这个论坛上的几十个线程,应该通过简单地设置GIT_SSH
环境变量来完成,但是在我的例子中没有这样做。
我该怎么做?
发布于 2021-09-20 16:36:43
如果您的Windows是最近的Windows 10,则不再需要pagent/putty。
只需确保您的%PATH%
包括用于Windows的Git附带的打包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网址。
只需输入bash
,就可以从该CMD中打开bash。(保持在同一个CMD中继承您的%PATH%
更改)。
如果您有旧的putty SSH密钥,则使用以下方法重新生成新的键(仍然来自该CMD):
ssh-keygen -t rsa -P "" -f ~/.ssh/myKey1
然后在~/.ssh/config
主机myRepo1主机名/url/to/repo1用户git IdentityFile ~/..ssh/myKey1 1
用以下方法进行测试:
git ls-remote myRepo1
然后检查GitExtension文档"Remotes/ OpenSSH和github“,尝试使用OpenSSH而不是putty键。
https://stackoverflow.com/questions/69253031
复制相似问题