我正在尝试在我的Web主机上创建一个git存储库并在我的计算机上克隆它.这是我做的:
我在远程服务器上创建了一个存储库.
我生成了一个密钥对:ssh-keygen -t dsa
.
我将我的密钥添加到ssh-agent.
我复制到服务器公钥中~/.ssh
.
然后,在尝试运行该命令后git clone ssh://user@host/path-to-repository
,我收到一个错误:
无法与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
您还可以添加-oHostKeyAlgorithms=+ssh-dss
ssh行:
ssh -oHostKeyAlgorithms=+ssh-dss user@host
对我来说,这工作:(加入.ssh\config
)
Host * HostkeyAlgorithms +ssh-dss PubkeyAcceptedKeyTypes +ssh-dss
如果你像我一样,并且宁愿不制作这个安全漏洞系统或用户范围,那么你可以通过在那些repos中运行这个命令,为任何需要它的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
然后运行第一个命令使其永久化.
如果你没有最新版本,并且仍然希望尽可能保留当地的洞,我建议推杆
export GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss'
在一个文件中,比如说git_ssh_allow_dsa_keys.sh
,并source
在需要时进行处理.