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

问题描述 投票:0回答:9

我正在尝试在我的网络主机上创建一个 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
致命:无法从远程存储库读取。
请确保您拥有正确的访问权限并且存储库存在。

那是什么意思?

ssh web-hosting
9个回答
197
投票

最近的 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

92
投票

您还可以在您的 ssh 行中添加

-oHostKeyAlgorithms=+ssh-dss

ssh -oHostKeyAlgorithms=+ssh-dss user@host

31
投票

对我来说这有效:(添加到

.ssh\config

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

14
投票

如果您想将此安全漏洞包含在单个存储库中,您可以通过在这些存储库中运行此命令来向需要此功能的任何 Git 存储库添加配置选项。 (注意:仅适用于 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

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

如果你没有最新的 Git,但仍然希望尽可能保持本地漏洞,我建议把

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 或 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_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(不是问题中的 DSA)创建一个密钥:

ssh-keygen

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

这是另一篇好文章。

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


1
投票

在我的 bitbucket 案例中,以下方法有效。

Host yourhost(ex: bitbucket.com)
    User git
    PubkeyAcceptedAlgorithms +ssh-rsa
    HostkeyAlgorithms +ssh-rsa

0
投票
  1. 添加到

    vi ~/.ssh/config

    Host YOUR_HOST_NAME
        HostkeyAlgorithms ssh-dss
    
  2. 在我的例子中错误是:

    无法与 IP_ADDRESS 端口 22 协商:没有匹配的主机密钥 类型找到。他们提供:ssh-rsa、ssh-dss

    在这种情况下它有助于

    vi ~/.ssh/config

    Host YOUR_HOST_NAME
        HostKeyAlgorithms ssh-dss
        PubkeyAcceptedKeyTypes ssh-rsa
    

    所以,

    host key algorithm
    ssh-dss
    pub key
    ssh-rsa
    .

    然后我可以正常使用

    ssh
    这个主机(没有任何标志)。


0
投票

添加这个

config
文件后,它对我有用

Host *
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa


-4
投票

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

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

host xxx.xxx
 Hostname xxx.xxx
 IdentityFile ~/.ssh/id_rsa
 User xxx
 KexAlgorithms +diffie-hellman-group1-sha1
© www.soinside.com 2019 - 2024. All rights reserved.