无法与XX.XXX.XX.XX协商:未find匹配的主机键types。 他们的报价:ssh-dss

我想在我的虚拟主机上创build一个git仓库,并将其克隆到我的电脑上。 以下是我所做的:

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

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

无法与XX.XXX.XX.XX协商:未find匹配的主机键types。 他们的报价:ssh-dss
致命的:无法从远程存储库读取。
请确保您拥有正确的访问权限并存在存储库。

那是什么意思?

最近的openssh版本默认不推荐使用DSA密钥。 您应该build议您的GIT提供商添加一些合理的主机密钥。 仅依靠DSA不是一个好主意。

作为一个解决方法,您需要告诉您的ssh客户端,您要接受DSA主机密钥,正如官方文档中介绍的传统用法 。 你有几个可能性,但我build议将这些行添加到你的~/.ssh/config文件中:

 Host your-remote-host HostkeyAlgorithms +ssh-dss 

其他的可能性是使用环境variablesGIT_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

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

如果你像我一样,而不是使这个安全漏洞系统或用户范围,那么你可以添加一个configuration选项,以通过在这些回购中运行此命令需要此git repos。 (注意只适用于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 

然后运行第一个命令使其成为永久的。

如果你没有最新的,仍然想保持尽可能的本地洞,我build议把

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

在一个文件的某个地方,说git_ssh_allow_dsa_keys.sh ,并在需要时source

我想与服务器端的解决scheme进行一点合作。 所以,服务器说它不支持DSA,这是因为openssh客户端默认不会激活它 :

OpenSSH 7.0和更高版本同样禁用ssh-dss(DSA)公钥algorithm。 它也太弱,我们build议不要使用它。

所以,要解决这个在服务器端我应该激活其他密钥algorithm,如RSA或ECDSA。 我刚刚有一个局域网中的服务器的这个问题。 我build议如下:

更新openssh:

 yum update openssh-server 

如果有sshd_config.rpmnew,则在sshd_config中合并新的configuration。

validation/ 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中validationHostKeyconfiguration。 它应该允许configurationRSA和ECDSA。 (如果所有这些都是默认注释,它也会允许RSA,请参见man sshd_config中的HostKey部分)。

 # 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创build一个密钥(而不是像问题中的DSA):

 ssh-keygen 

在此之后,因为有比ssh-dss(DSA)更多的选项,客户端openssh(> = v7)应该与RSA或更好的algorithm连接。

这里另一篇好文章。

这是我回答的第一个问题,欢迎大家提出意见:

你要么按照上面的方法或这一个

在.ssh目录中创buildconfiguration文件并添加这些行。

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