克隆git存储库的问题

时间:2015-11-25 07:03:25

标签: git ssh

我正在尝试克隆git存储库,但我收到错误

Unable to negotiate with <server>: no matching key exchange method found.
Their offer: diffie-hellman-group1-sha1
fatal: Could not read from remote repository.

我修改了~/.ssh/config并添加了

Host somehost.example.org
KexAlgorithms +diffie-hellman-group1-sha1"

但我仍然得到同样的错误。

其他解决方案是使用命令ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 user@127.0.0.1 -p 2222,但我也得到连接拒绝,端口号为22。

我正在使用Windows机器。

7 个答案:

答案 0 :(得分:15)

touch ~/.ssh/config

为遇到同一问题的人附加我的ssh配置

## use kex algorithm ##
Host 10.172.4.66
    KexAlgorithms diffie-hellman-group1-sha1

## Avoid Write failed : boken pipe issue ##
ServerAliveInterval 120
TCPKeepAlive no

如果遇到另一个问题,请使用更大的postBuffer

fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed
$ git config --global http.postBuffer 10000000000000000000000000000000

$ git clone ssh://xxx xx
Cloning into 'xx'...
remote: Counting objects: 105491, done.
remote: Compressing objects: 100% (32876/32876), done.
Receiving objects: 100% (105491/105491), 1.74 GiB | 19.55 MiB/s, done.
remote: Total 105491 (delta 67211), reused 104583 (delta 66603)
Resolving deltas: 100% (67211/67211), done.
Checking connectivity... done.
Checking out files: 100% (16545/16545), done.

答案 1 :(得分:11)

我正在使用Windows,因为我的情况是git clone在Jenkins中失败(在系统用户下运行)。

添加

Host somehost.example.org
   KexAlgorithms +diffie-hellman-group1-sha1

进入〜/ .ssh / config 将使克隆在当前用户工作时运行。

对于其他用户,OpenSSH不会获取配置。我必须将上述配置添加到全局配置文件中:“ C:\ Program Files \ Git \ etc \ ssh \ ssh_config” ,以使其正常工作。

这种情况发生在我更新git-for-windows客户端后,新的git禁用了一些旧的密钥交换方法。另一个解决方法是安装较旧版本的git。例如: https://github.com/git-for-windows/git/releases/tag/v2.20.1.windows.1

答案 2 :(得分:10)

附加文件 C:\ Program Files \ Git \ etc \ ssh \ ssh_config 对我有用:

KexAlgorithms +diffie-hellman-group1-sha1,diffie-hellman-group14-sha1

(干杯

答案 3 :(得分:3)

Host     xxxx.yyyy.com 
KexAlgorithms +diffie-hellman-group1-sha1
Port     portNumber
User     userName-yourDomain-com

在.config文件中包含上面的行,并在id.rsa.pub和其他文件所在的.ssh目录中添加.config文件。

答案 4 :(得分:3)

当客户端和服务器无法就使用的密钥交换算法达成共识时,将发生此错误。 您可以在错误日志中看到服务器提供使用的密钥交换算法。如果您的客户端无法使用服务器提供的方法,则会引发错误。 要解决此问题,可以在客户端或服务器端进行更改。如果您可以更改服务器的配置,那将是更好的选择,因为您不必在所有客户端中进行更改。 要在服务器端解决此问题,您需要升级/配置服务器以不使用不推荐使用的算法。

如果无法在服务器端进行更改,则可以简单地迫使客户端重新启用服务器准备使用的密钥交换算法。您可以通过更新linux上的〜/ .ssh / config 文件或Windows上的 C:\ Program Files \ Git \ etc \ ssh \ ssh_config 文件并添加来实现这种永久性以下几行:

Host example.org # you can use the * wildcard character. e.g. *.example.org or simplly * for all hosts
User yourUserName # optional
KexAlgorithms +diffie-hellman-group1-sha1 # you can also specify multiple algorithms by separating them with comma e.g. diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1

答案 5 :(得分:2)

详细描述了您的问题here

  

如果客户端和服务器无法就相互参数集达成一致,则连接将失败   OpenSSH(7.0及更高版本)将产生如下错误消息:
  Unable to negotiate with 127.0.0.1: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

设置备用ssh密钥

ssh-keygen -t rsa -C <your comment>

现在在您的服务器帐户下添加公钥,然后重试。

答案 6 :(得分:0)

如果您正在使用Windows并且在龟龟Git或Sourcetree中发生此错误,请尝试使用puttYGen生成您的密钥。或者使用puttYGen从现有私钥创建一个新密钥(使用“加载”选项),然后在任意文件夹中保存带有扩展名ppk的私钥。 之后,在分页中添加此密钥(扩展名为ppk)(谷歌知道图标是怎样的,它必须出现在小时旁边的右下角)右键单击并添加密钥。 尽量确保你设置你的乌龟或你的sourcetree使用这个ppk密钥。 乌龟:设置 - 网络 - ssh客户端(必须是TortoiseGitPLink.exe,如果没有,则在git tortoise git_home \ bin文件夹中) 源树:工具 - 选项 - SSh客户端Putty / PLink