我正在尝试克隆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机器。
答案 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-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