SSH-“无法协商...未找到匹配的主机密钥类型。”

j0h*_*j0h 14 ssh

我在嵌入式系统上有一个 shell 服务器(它是一个 32 位 ARMel 系统)。当我登录它时,我使用:

$ ssh root@ip 
Unable to negotiate with ip port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
Run Code Online (Sandbox Code Playgroud)

我尝试为其提供预期的密码类型之一,并带有以下-c选项:

$ ssh -c ssh-dss root@ip 
Unknown cipher type 'ssh-dss'
Run Code Online (Sandbox Code Playgroud)

或者:

$ ssh -c ssh-rsa root@ip
Unknown cipher type 'ssh-rsa'
Run Code Online (Sandbox Code Playgroud)

所以我不知道下一步该做什么。我有一个 UART 串​​行控制台,可以向其发送命令,但我宁愿使用 SSH。我知道它正在运行该服务,但我不知道如何登录它。

Fro*_*ozz 22

我在旧版 Cisco 嵌入式系统中经常看到这种情况,其固件无法再升级到现代 ssh 标准。

除了主机密钥算法之外,您可能还需要使用过时的密钥交换算法和/或密码规范。

重击示例:

ssh -oKexAlgorithms=+diffie-hellman-group1-sha1\
 -oHostKeyAlgorithms=+ssh-rsa\
 -oCiphers=+aes256-cbc\
 <user>@asa5505
Run Code Online (Sandbox Code Playgroud)

好消息是 OpenSSH(我使用的)通常会告诉我正在提供哪些算法或密码 - 否则我可能需要进行大量的试验和错误。

如果我这样做,可用的协议可以在 OpenSSH 中列出:

ssh -Q [ciphers|hostkeyalgorithms|kexalgorithms|...]
Run Code Online (Sandbox Code Playgroud)

更新: 由于人们似乎对使用 ssh_config 执行此操作很感兴趣(感谢 Bob、Z 等人),我将提供该方法的示例:

############################################
# ~/.ssh/config
Host 'asa5505*'
        KexAlgorithms +diffie-hellman-group1-sha1
        HostKeyAlgorithms +ssh-rsa
        Ciphers +aes128-cbc

Run Code Online (Sandbox Code Playgroud)

由于出于安全原因这些协议已被弃用,因此您应该使用“主机”或“匹配”限定来限制默认使用,以便它们仅用于需要它们的旧目标。

同样,您应该避免将这些例外放入/etc/ssh/ssh_config/etc/ssh/ssh_config.d/下,除非您的目的是让所有当前和未来的用户默认使用它们。

有关所有详细信息,请参阅:

man ssh_config
Run Code Online (Sandbox Code Playgroud)

  • @Frobozz您应该能够在“ssh_config”中保存特定于服务器的客户端配置。 (3认同)

小智 16

尝试使用这个:

ssh -oHostKeyAlgorithms=+ssh-rsa root@ip
Run Code Online (Sandbox Code Playgroud)

笔记:

  • @AndrewSavinykh 是的,默认情况下,现代 SSH 客户端将拒绝使用过时的加密(例如基于 sha1 的任何内容),而这些旧算法是遗留设备唯一支持的算法。您必须通过告诉客户端“是的,我知道这有点不安全,无论如何连接,它仍然比 telnet 更好”来手动选择加入。(这仍然比在全球范围内启用旧加密要好得多,因为这还可以对完全支持现代加密的服务器的连接进行降级攻击。) (9认同)
  • 找出为什么需要这样做会很有趣。显然 openssh 知道需要哪种算法,因为服务器告诉它,并且它有支持,那么为什么需要特殊设置才能连接呢?是否被认为是不安全的? (3认同)
  • 有点令人困惑的是,同一个密钥可以使用多种“算法”。因此“ssh-rsa”密钥在默认配置中仍然可以使用,但“ssh-rsa”算法则不行,因为它使用基于 sha1 的签名。 (2认同)

小智 5

它还取决于您在自己的计算机上运行的内容。如果您运行的是 Arch 或 Fedora36+(基于 OpenSSL3.0),则旧算法已被弃用或禁用。我必须在 3.0 连接到旧服务器的 ssh 配置中包含此配置:

HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
Run Code Online (Sandbox Code Playgroud)