我正在尝试在我的Web主机上创建一个git存储库并在我的计算机上克隆它 . 这是我做的:
-
我在远程服务器上创建了一个存储库 .
-
我生成了一对密钥:
ssh-keygen -t dsa
. -
我将我的密钥添加到ssh-agent .
-
我已复制到
~/.ssh
中的服务器公钥 .
然后,在尝试运行命令 git clone ssh://user@host/path-to-repository
后,出现错误:
无法与XX.XXX.XX.XX协商:未找到匹配的主机密钥类型 . 他们的提议:ssh-dss致命:无法从远程存储库读取 . 请确保您具有正确的访问权限并且存储库存在 .
那是什么意思?
6 回答
您可以按照上述方法或此方法进行操作
在.ssh目录中创建配置文件并添加这些行 .
最近的openssh版本默认不推荐使用DSA密钥 . 您应该建议您的GIT提供商添加一些合理的主机密钥 . 仅依靠DSA不是一个好主意 .
作为解决方法,您需要告诉
ssh
客户端您要接受DSA主机密钥,如official documentation for legacy usage中所述 . 您几乎没有可能,但我建议您将这些行添加到~/.ssh/config
文件中:其他可能性是使用环境变量
GIT_SSH
来指定这些选项:您还可以在ssh行中添加
-oHostKeyAlgorithms=+ssh-dss
:对我来说,这工作:(添加到
.ssh\config
)如果你像我一样,并且宁愿不制作这个安全漏洞系统或用户范围,那么你可以通过在那些repos中运行这个命令,为任何需要它的git repos添加一个配置选项 . (注意仅适用于git版本> = 2.10,发布2016-09-04)
这仅在设置回购后才有效 . 如果您不习惯手动添加远程(并且只想克隆),那么您可以像这样运行克隆:
然后运行第一个命令使其永久化 .
如果你没有最新版本,并且仍然希望尽可能保留当地的洞,我建议推杆
在一个文件的某个地方,比如
git_ssh_allow_dsa_keys.sh
,并在需要时source
.我想与服务器端的解决方案进行一点合作 . 所以,服务器说它不支持DSA,这是因为openssh client does not activate it by default:
所以,要在服务器端解决这个问题,我应该激活其他关键算法,如RSA或ECDSA . 我只是在局域网中的服务器上遇到此问题 . 我建议如下:
更新openssh:
如果存在sshd_config.rpmnew,则在sshd_config中合并新配置 .
验证/ etc / ssh /中是否有主机密钥 . 如果没有生成新的,请参阅
man ssh-keygen
.在/ etc / ssh / sshd_config中验证HostKey配置 . 它应该允许配置RSA和ECDSA . (如果默认情况下所有这些都被注释,它也会允许RSA,请参阅
man sshd_config
HostKey的一部分) .对于客户端,只需执行以下操作即可为ssh(不是问题中的DSA)创建密钥:
在此之后,因为有比ssh-dss(DSA)更多的选项,所以客户端openssh(> = v7)应该与RSA或更好的算法连接 .
Here another good article.
这是我回答的第一个问题,欢迎提出建议:D .