解决SSH连接时出现“Unable to negotiate with XXX port: no matching host key type found. Their offer: ssh-rsa,ssh-dss”问题的详细指南

作者:蛮不讲李2024.01.22 13:27浏览量:91

简介:本文将为你详细解释SSH连接时遇到“Unable to negotiate with XXX port: no matching host key type found. Their offer: ssh-rsa,ssh-dss”错误的原因,并提供相应的解决方案。

SSH(Secure Shell)是一种加密的网络协议,用于远程登录和执行命令。在连接SSH服务器时,客户端会验证服务器的公钥是否与已知的公钥匹配,以确认服务器的身份。当出现“Unable to negotiate with XXX port: no matching host key type found. Their offer: ssh-rsa,ssh-dss”错误时,意味着客户端无法识别服务器的公钥类型。这通常是因为客户端和服务器的SSH版本不兼容,或者服务器使用了不被客户端支持的公钥类型。
要解决这个问题,你可以尝试以下几种方法:

  1. 更新SSH客户端和服务器:确保你的SSH客户端和服务器都是最新版本。新版本的SSH协议可能支持更多的公钥类型,因此更新软件可以解决这个问题。你可以通过以下命令更新SSH客户端和服务器:
    更新SSH客户端:
    1. # 对于Ubuntu/Debian系统,使用apt-get命令
    2. sudo apt-get update && sudo apt-get upgrade openssh-client
    3. # 对于CentOS/RHEL系统,使用yum命令
    4. sudo yum update openssh-clients
    更新SSH服务器:
    1. # 对于Ubuntu/Debian系统,使用apt-get命令
    2. sudo apt-get update && sudo apt-get upgrade openssh-server
    3. # 对于CentOS/RHEL系统,使用yum命令
    4. sudo yum update openssh-server
  2. 修改SSH服务器配置:如果你无法更新SSH客户端或服务器,或者更新后问题仍然存在,你可以尝试修改SSH服务器的配置文件。打开SSH服务器配置文件(通常位于/etc/ssh/sshd_config),找到HostKey指令。在该指令中添加或修改以下行:
    1. HostKey /etc/ssh/ssh_host_rsa_key
    2. HostKey /etc/ssh/ssh_host_dsa_key
    确保这两行配置正确指向了服务器的RSA和DSA公钥文件。保存配置文件后,重启SSH服务器以使更改生效。重启命令取决于你的操作系统和SSH服务器软件,例如使用systemctl命令:
    1. systemctl restart sshd
  3. 使用公钥类型协商:如果以上方法都无法解决问题,你可以尝试配置SSH客户端和服务器使用特定的公钥类型进行协商。在客户端的SSH配置文件(通常位于~/.ssh/config)中添加以下内容:
    css Host XXX HostKeyAlgorithms +ssh-rsa,ssh-dss将XXX替换为你要连接的SSH服务器的别名或IP地址。保存配置文件后,尝试重新连接SSH服务器。这将强制客户端和服务器使用RSA或DSA公钥类型进行连接。请注意,这种方法可能会降低安全性,因为RSA和DSA公钥类型已经被认为不够安全。因此,建议仅在无法使用更安全的公钥类型时才使用这种方法。另外,请确保你了解RSA和DSA公钥类型的优缺点,并采取适当的安全措施来保护你的连接。