ChatGPT解决这个技术问题 Extra ChatGPT

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

我正在尝试在我的网络主机上创建一个 git 存储库并将其克隆到我的计算机上。这是我所做的:

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

然后,在尝试运行命令 git clone ssh://user@host/path-to-repository 后,我收到一个错误:

无法与 XX.XXX.XX.XX 协商:找不到匹配的主机密钥类型。他们的提议: ssh-dss 致命:无法从远程存储库中读取。请确保您具有正确的访问权限并且存储库存在。

这意味着什么?


J
Jakuje

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

作为一种解决方法,您需要告诉您的 ssh 客户端您要接受 DSA 主机密钥,如 official documentation for legacy usage 中所述。您的可能性很小,但我建议将这些行添加到您的 ~/.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 目录中没有这样的文件,则可以使用名为“config”的空文本文件。
绝对完美,GIT_SSH_COMMAND="ssh -oHostKeyAlgorithms=+ssh-dss" git clone ssh://tejastank@192.168.1.4:8800/educationapp.git
正如@user2885534 所提到的,如果您希望在执行 git fetch 等操作时接受您的密钥,您还需要 PubkeyAcceptedKeyTypes +ssh-rsa,ssh-dss
G
Guillaume

您还可以在 ssh 行中添加 -oHostKeyAlgorithms=+ssh-dss

ssh -oHostKeyAlgorithms=+ssh-dss user@host

这是最快的解决方案 +1,因为它还永久解决了该主机的问题。从长远来看,另一个建议是,如果可能的话,主机系统应该升级其 SSH 守护程序,因为它看起来是 DSS,它不再被认为是非常安全的。
@AreebSooYasir,它不会为该主机永久修复它,至少在 Windows 的 Git Bash 中是这样。
J
J. Chomel

对我来说这很有效:(添加到 .ssh\config

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

第二个选项与问题无关,第一个选项已经在我的回答中提到。
Host your-host 对我不起作用,前提是 your-host 是我从(客户端)运行 ssh 命令的主机的名称。但是 Host * 为我工作。
@Krischu 不,yuor-host 是您运行 ssh 的主机。为所有主机设置不安全的默认值始终是个坏主意。
@Jakuje 没有将其设置为不安全的默认值;作为最后的手段,它会附加到默认列表中。来自 openssh.com/legacy.html “列表前的‘+’指示 ssh 将算法附加到客户端的默认设置而不是替换默认设置。通过附加,您将在服务器开始支持时自动升级到最受支持的算法。”
即使在不得已的情况下启用 1k DSA 密钥也不是一个好主意。多年来,它被禁用是有充分理由的。
M
Michael

如果您想将此安全漏洞包含在单个存储库中,您可以通过在这些存储库中运行此命令来将配置选项添加到需要此功能的任何 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将其输入。


G
Gus Calca

我想与服务器端的解决方案进行一些合作。所以,服务器说它不支持 DSA,这是因为 openssh client does not activate it by default

OpenSSH 7.0 及更高版本同样禁用 ssh-dss (DSA) 公钥算法。它也很弱,我们建议不要使用它。

所以,要在服务器端解决这个问题,我应该激活其他密钥算法,如 RSA o 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,请参见 HostKey 的 man sshd_config 部分)。

# 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 或更好的算法连接。

Here another good article.

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


i
indika

就我的 bitbucket 而言,以下工作有效。

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

a
ashokhein

您要么遵循上述方法,要么遵循这一方法

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

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

那是解决完全不同的问题。

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅