无法与XX.XXX.XX.XX协商:找不到匹配的主机密钥类型。他们的报价:ssh-dss


110

我试图在Web主机上创建一个git存储库,并将其克隆到我的计算机上。这是我所做的:

  1. 我在远程服务器上创建了一个存储库。
  2. 我生成了一个密钥对:ssh-keygen -t dsa
  3. 我将密钥添加到ssh-agent。
  4. 我将中的公用密钥复制到了服务器~/.ssh

然后,在尝试运行命令后git clone ssh://user@host/path-to-repository,出现错误:

无法与XX.XXX.XX.XX协商:找不到匹配的主机密钥类型。他们的报价:ssh-dss
致命:无法从远程存储库读取。
请确保您具有正确的访问权限,并且存储库存在。

那是什么意思?


Answers:


171

默认情况下,最新的openssh版本不赞成使用DSA密钥。您应该建议您的GIT提供者添加一些合理的主机密钥。仅依靠DSA并不是一个好主意。

作为解决方法,您需要告知ssh客户您要接受DSA主机密钥,如有关旧版用法官方文档中所述。您几乎没有什么可能,但我建议将以下行添加到~/.ssh/config文件中:

Host your-remote-host
    HostkeyAlgorithms +ssh-dss

其他可能性是使用环境变量GIT_SSH来指定以下选项:

GIT_SSH_COMMAND="ssh -oHostKeyAlgorithms=+ssh-dss" git clone ssh://user@host/path-to-repository

1
现在,它无需指定主机名即可工作,只需使用即可HostkeyAlgorithms +ssh-dss。谢谢。
giovannipds

1
@giovannipds当然必须是您要连接的远程主机。@ downvoters解释downvotes会很好。
雅库耶

@Jakuje对不起,我单击了错误,并且由于无法立即更改,所以无法更新我的答案。
giovannipds

1
@Jakuje我已经更新了我的投票,只是想告诉您。=)
giovannipds

如果您的.ssh目录中没有此类文件,则将使用一个名为“ config”的空文本文件。
RMorrisey

78

您还可以-oHostKeyAlgorithms=+ssh-dss在ssh行中添加:

ssh -oHostKeyAlgorithms=+ssh-dss user@host

这是最快的解决方案+1,因为它还可以永久解决该主机的问题。从长远来看,还有一个建议是,如果可能的话,主机系统应该升级其SSH守护进程,因为DSS看起来不再安全了。
Areeb Soo Yasir

20

对我来说,这可行:(添加到中.ssh\config

Host *
HostkeyAlgorithms +ssh-dss
PubkeyAcceptedKeyTypes +ssh-dss

第二个选项与问题无关,第一个选项已在我的答案中提及。
雅库耶

如果您的主机是我正在从(客户端)运行ssh命令的主机的名称,那么您的主机对我不起作用。但是主持人*为我工作。
Krischu '16

2
@Krischu不,yuor-host您正在ssh对抗的主机。为所有主机设置不安全的默认值总是一个坏主意。
雅库耶

10

如果您像我一样,并且不想在整个系统或整个用户范围内使用此安全漏洞,则可以通过在那些仓库中运行此命令来向需要此仓库的任何git仓库添加config选项。(注意仅适用于git版本> = 2.10,于2016-09-04发布)

git config core.sshCommand 'ssh -oHostKeyAlgorithms=+ssh-dss'

但是,这仅在设置存储库后有效。如果您不愿意手动添加远程服务器(并且只想克隆),则可以这样运行克隆:

GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss' git clone ssh://user@host/path-to-repository

然后运行第一个命令将其永久化。

如果您没有最新消息,并且仍然希望将漏洞保留在尽可能的本地,我建议您放

export GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss'

在某处的文件中说git_ssh_allow_dsa_keys.sh,并source在需要时进行编辑。


3

我想与服务器端解决方案进行一些合作。因此,服务器表示它不支持DSA,这是因为openssh客户端默认不激活它

OpenSSH 7.0和更高版本类似地禁用ssh-dss(DSA)公钥算法。它也很弱,我们建议不要使用它。

因此,要在服务器端解决此问题,我应该激活其他密钥算法,例如RSA o ECDSA。我只是在局域网中的服务器上遇到了这个问题。我建议以下内容:

更新openssh:

yum update openssh-server

如果存在sshd_config.rpmnew,则在sshd_config中合并新配置。

确认/ etc / ssh /中有主机密钥。如果没有生成新的,请参阅man ssh-keygen

$ ll /etc/ssh/
total 580
-rw-r--r--. 1 root root     553185 Mar  3  2017 moduli
-rw-r--r--. 1 root root       1874 Mar  3  2017 ssh_config
drwxr-xr-x. 2 root root       4096 Apr 17 17:56 ssh_config.d
-rw-------. 1 root root       3887 Mar  3  2017 sshd_config
-rw-r-----. 1 root ssh_keys    227 Aug 30 15:33 ssh_host_ecdsa_key
-rw-r--r--. 1 root root        162 Aug 30 15:33 ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys    387 Aug 30 15:33 ssh_host_ed25519_key
-rw-r--r--. 1 root root         82 Aug 30 15:33 ssh_host_ed25519_key.pub
-rw-r-----. 1 root ssh_keys   1675 Aug 30 15:33 ssh_host_rsa_key
-rw-r--r--. 1 root root        382 Aug 30 15:33 ssh_host_rsa_key.pub

在/ etc / ssh / sshd_config中验证HostKey配置。它应该允许配置RSA和ECDSA。(如果默认情况下所有注释都被注释,则也将允许RSA,请参阅man sshd_configHostKey部分)。

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

对于客户端,只需执行以下操作即可为ssh创建密钥(而不是问题中的DSA):

ssh-keygen

此后,由于存在比ssh-dss(DSA)更多的选项,因此客户端openssh(> = v7)应该与RSA或更好的算法连接。

这是另一篇好文章。

这是我回答的第一个问题,欢迎提出建议:D。


1

一个人如何指定多种算法?我问是因为git刚刚在我的工作笔记本电脑上(Windows 10,使用Windows的正式版Git进行了更新)更新了,当我尝试将项目分支推送到Azure DevOps远程服务器时出现了此错误。我试图推--set-upstream并得到了这个:

Unable to negotiate with 20.44.80.98 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

那么,如何将上述建议纳入其中?(作为一个快速入门,我在group14上使用了@golvok的解决方案,它可以工作,但是我真的不知道1或14是否更好,等等。)


-3

您可以采用上述方法,也可以采用这种方法

在.ssh目录中创建配置文件,并添加以下行。

host xxx.xxx
 Hostname xxx.xxx
 IdentityFile ~/.ssh/id_rsa
 User xxx
 KexAlgorithms +diffie-hellman-group1-sha1

那是解决完全不同的问题。
贾库耶
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.