SSH 返回:未找到匹配的主机密钥类型。他们的提议:ssh-dss

SSH 返回:未找到匹配的主机密钥类型。他们的提议:ssh-dss

我习惯于在 Windows 系统上或 OSX 命令行终端上使用 Putty 通过 SSH 连接到 NAS,而无需对客户端进行任何配置。

Ubuntu 16.04 尝试通过 SSH 进入 NAS(通过 LAN):

ssh [email protected]

Unable to negotiate with 192.168.8.109 port 22: no matching host key type found. Their offer: ssh-dss
  1. 这个结果/反应是故意的吗?
  2. 是否有一个简单的更正方法可以通过 SSH 访问 NAS?

答案1

16.04 中包含的 OpenSSH 版本禁用了 ssh-dss。有一个简洁的页面,其中包含有关此问题的遗留信息:http://www.openssh.com/legacy.html

简而言之,您应该将选项添加-oHostKeyAlgorithms=+ssh-dss到 SSH 命令中:

ssh -oHostKeyAlgorithms=+ssh-dss [email protected]

您还可以添加主机模式,~/.ssh/config这样就不必每次都指定密钥算法:

Host nas
  HostName 192.168.8.109
  HostKeyAlgorithms=+ssh-dss

这还有一个好处,就是您不需要输入 IP 地址。相反,它ssh会识别主机nas并知道要连接到哪里。当然,您可以使用任何其他名称来代替它。

答案2

如果您来这里是因为 Bitbucket 在更新至 OpenSSH 8.8 后返回以下内容:

Unable to negotiate with <ip address> port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

你应该不是启用 DSS(就像在接受的答案中一样),而是启用 RSA ~/.ssh/config

Host bitbucket.org
    HostKeyAlgorithms +ssh-rsa
    PubkeyAcceptedKeyTypes +ssh-rsa

参考: https://community.atlassian.com/t5/Bitbucket-articles/OpenSSH-8-8-client-incompatibility-and-workaround/ba-p/1826047

请注意,这是本文中建议的PubkeyAcceptedKeyTypes向后兼容别名 。如果您使用它,则可以将相同的配置用于较旧的 OpenSSH 客户端版本,例如,如果您与 docker 容器共享配置。PubkeyAcceptedAlgorithms

您可以对其他主机执行相同操作,或用于Host *允许任何主机使用 RSA。

答案3

在 /etc/ssh/ssh_config.d/ 中创建以 *.conf 为扩展名的新文件

sudo nano /etc/ssh/ssh_config.d/my.conf

添加至新空行:

HostKeyAlgorithms ssh-rsa,ssh-dss
PubkeyAcceptedKeyTypes ssh-rsa,ssh-dss

答案4

编辑 ~/.ssh/config 文件是最佳选择。如果您在同一子网上需要连接多台主机,则可以使用以下方法避免在文件中输入每台主机:

 Host 192.168.8.*
  HostKeyAlgorithms=+ssh-dss

这对我来说非常有用,因为我需要管理多个 Brocade 交换机,并且在我转移到 Ubuntu 16.04 后,它们开始抱怨主机密钥。

相关内容