无法与XX.XXX.XX.XX协商:未找到匹配的主机密钥类型。他们的提议:ssh-dss
我正在尝试在我的web主机上创建git存储库,并在我的计算机上克隆它。以下是我所做的:无法与XX.XXX.XX.XX协商:未找到匹配的主机密钥类型。他们的提议:ssh-dss,ssh,web-hosting,Ssh,Web Hosting,我正在尝试在我的web主机上创建git存储库,并在我的计算机上克隆它。以下是我所做的: 我在远程服务器上创建了一个存储库 我生成了一个密钥对:ssh-keygen-tdsa 我将密钥添加到ssh代理 我在~/.ssh中将公钥复制到服务器 然后,在尝试运行命令git clone之后ssh://user@主机/存储库路径,我收到一个错误: 无法与XX.XXX.XX.XX协商:未找到匹配的主机密钥类型。他们的报价:ssh dss 致命:无法从远程存储库读取。 请确保您具有正确的访问权限,并且存储库存在
ssh-keygen-tdsa
~/.ssh
中将公钥复制到服务器git clone之后ssh://user@主机/存储库路径
,我收到一个错误:
无法与XX.XXX.XX.XX协商:未找到匹配的主机密钥类型。他们的报价:ssh dss致命:无法从远程存储库读取。
请确保您具有正确的访问权限,并且存储库存在
这意味着什么?最近的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
您还可以在ssh行中添加
-oHostKeyAlgorithms=+ssh dss
:
ssh -oHostKeyAlgorithms=+ssh-dss user@host
对我来说,这很有效:(添加到.ssh\config
)
如果您和我一样,不希望将此安全漏洞扩展到系统或用户范围,那么您可以通过在任何git repo中运行此命令,向任何需要此漏洞的git repo添加配置选项。(注:仅适用于2016-09-04发布的git版本>=2.10) 然而,这仅在回购协议设置后有效。如果您不习惯手动添加远程设备(并且只想克隆),则可以按如下方式运行克隆:
GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss' git clone ssh://user@host/path-to-repository
然后运行第一个命令使其永久化
如果你没有最新的,但仍然想保持尽可能本地的洞,我建议把
export GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss'
在某个文件中,比如说
git\u ssh\u allow\u dsa\u keys.sh
,然后在需要时source
将其删除。您要么遵循上述方法,要么遵循此方法
在.ssh目录中创建配置文件并添加以下行
host xxx.xxx
Hostname xxx.xxx
IdentityFile ~/.ssh/id_rsa
User xxx
KexAlgorithms +diffie-hellman-group1-sha1
我想与服务器端的解决方案进行一些协作。因此,服务器说它不支持DSA,这是因为: OpenSSH 7.0及更高版本同样禁用ssh dss(DSA)公钥算法。它也很弱,我们建议不要使用它 因此,要在服务器端解决这个问题,我应该激活其他关键算法,如RSA o ECDSA。我刚刚在局域网的服务器上遇到了这个问题。 我建议如下: 更新openssh:
yum update openssh-server
如果存在sshd_config.rpmnew,则在sshd_config中合并新配置
验证/etc/ssh/上是否有主机密钥。如果不生成新的,请参阅manssh-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_配置中验证HostKey配置。它应该允许配置RSA和ECDSA。(如果默认情况下对它们都进行了注释,那么它也将允许RSA,请参见主机密钥部分中的mansshd_config
对于客户端,只需执行以下操作,即可为ssh(而不是问题中的DSA)创建密钥:
ssh-keygen
在此之后,因为有比ssh-dss(DSA)更多的选项,所以客户端openssh(>=v7)应该与RSA或更好的算法连接
这是我回答的第一个问题,我欢迎建议:D.如何指定多个算法?我这样问是因为git刚刚在我的工作笔记本电脑上更新过(Windows 10,使用官方的git for Windows build),当我试图将项目分支推送到我的Azure DevOps remote时,我遇到了这个错误。我试着往上游推,结果发现:
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.
那么,考虑到这两个因素,如何实施上述建议呢?(作为一个快速解决方案,我使用@golvok的group14解决方案,效果很好,但我真的不知道是1还是14更好,等等)第二个选项与问题无关,第一个选项已在我的回答中提到。主机您的主机不适用于我,前提是您的主机是我运行ssh命令的主机的名称(客户端). 但是Host*为我工作。@krishu不,
yuor Host
是您运行ssh
的主机。为所有主机设置不安全的默认值总是一个坏主意。@Jakuje它并没有将其设置为不安全的默认值;作为最后手段,它将附加到默认列表中。从列表前的“+”命令ssh将算法附加到客户端的默认集,而不是替换默认集。通过附加,您将在服务器开始支持时自动升级到受支持的最佳算法。即使在万不得已的情况下启用1k DSA密钥也不是一个好主意。多年来它一直处于禁用状态,现在它在没有指定主机名的情况下工作,只使用了hostkeyalgoriths+ssh-dss
。谢谢。@giovannipds它当然需要是您连接的远程主机。@向下投票人解释向下投票会很好。@Jakuje抱歉,我点击错了,因为无法立即更改,我无法更新我的答案。@Jakuje我已经更新了我的投票,只是想让你知道。=)如果.ssh目录中没有这样的文件,则可以使用名为“config”的空文本文件。这解决了完全不同的问题。请参阅这是最快的解决方案+1,因为它还永久性地修复了该主机的问题。从长远来看,还有一个建议是,如果可能的话,主机系统应该升级其SSH守护程序,因为它看起来不再是非常安全的DSS。与其将此作为答案发布,不如将其作为对原始问题的评论发布,或者问一个引用此问题的新问题。
# 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-keygen
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.