我习惯于在 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
- 这个结果/反应是故意的吗?
- 是否有一个简单的更正方法可以通过 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
请注意,这是本文中建议的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 后,它们开始抱怨主机密钥。