我在嵌入式系统上有一个 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)
小智 16
尝试使用这个:
ssh -oHostKeyAlgorithms=+ssh-rsa root@ip
Run Code Online (Sandbox Code Playgroud)
笔记:
小智 5
它还取决于您在自己的计算机上运行的内容。如果您运行的是 Arch 或 Fedora36+(基于 OpenSSL3.0),则旧算法已被弃用或禁用。我必须在 3.0 连接到旧服务器的 ssh 配置中包含此配置:
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
Run Code Online (Sandbox Code Playgroud)