当前位置:   article > 正文

SSH连接问题_couldn't agree a host key algorithm

couldn't agree a host key algorithm

项目场景:

使用Navicat连接远程服务器mysql数据库报错


问题描述

SSH: Couldn't agree a host key algorithm (available: rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,ssh-ed25519)

 

查看 /var/log/auth.log 日志文件得到:

Nov 25 12:30:29 iZeggd8Z sshd[135574]: rexec line 25: Deprecated option KeyRegenerationInterval
Nov 25 12:30:29 iZeggd8Z sshd[135574]: rexec line 26: Deprecated option ServerKeyBits
Nov 25 12:30:29 iZeggd8Z sshd[135574]: rexec line 44: Deprecated option RSAAuthentication
Nov 25 12:30:29 iZeggd8Z sshd[135574]: Unable to negotiate with 221.218.155.129 port 54666: no matching host key type found. Their offer: ssh-rsa,ssh-dss [preauth]

 


原因分析:

有两个问题主要是第二个问题

第一个问题是SSH服务器配置文件中包含了一些已被弃用的选项。

第二个问题是在与一个客户端建立连接时遇到了密钥类型不匹配的问题。

这个错误消息意味着尝试使用SSH连接到服务器时,客户端和服务器之间无法就使用的主机密钥算法达成一致。这通常是因为SSH客户端和服务器端支持的加密算法列表不匹配。

尝试连接SSH服务器的客户端只支持 `ssh-rsa` 和 `ssh-dss` 密钥类型。新版的OpenSSH可能默认不再支持这些不安全或过时的密钥类型,特别是 `ssh-dss`。

 

解决方案:

### 步骤 1: 移除或注释掉弃用的选项
编辑您的 `sshd_config` 文件,这通常在 `/etc/ssh/sshd_config` 路径下。您需要用有管理员权限的编辑器来进行编辑,例如使用 `sudo` 和 `vi` 或 `nano`:

```sh
sudo nano /etc/ssh/sshd_config
```
或者
```sh
sudo vi /etc/ssh/sshd_config
```

然后找到以下弃用的选项并将其注释掉或删除:
- `KeyRegenerationInterval`
- `ServerKeyBits`
- `RSAAuthentication`

例如,将这些行前面的 `#` 号取消注释:
```sh
#KeyRegenerationInterval 3600
#ServerKeyBits 1024
#RSAAuthentication yes
```

### 步骤 2: 适配不支持的密钥类型
从错误信息:
```
Unable to negotiate with 221.218.155.129 port 54666: no matching host key type found. Their offer: ssh-rsa,ssh-dss [preauth]
```
我们可以看出,尝试连接SSH服务器的客户端只支持 `ssh-rsa` 和 `ssh-dss` 密钥类型。新版的OpenSSH可能默认不再支持这些不安全或过时的密钥类型,特别是 `ssh-dss`。

要解决这个问题,您有几个选择:

1. **更新客户端以支持更现代的密钥类型,如 `ecdsa`、`ed25519` 或 `rsa`(带有较高的密钥长度)**。
2. **如果您不能更新客户端并且需要暂时兼容这些老旧的密钥类型,您可以在服务器的 `sshd_config` 文件中添加对 `ssh-rsa` 和 `ssh-dss` 的支持**。

例如,可以在 `sshd_config` 文件中添加或修改以下行:
```sh
# 仅当必须提供向后兼容性时才使用以下设置
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa,+ssh-dss
```

确保保存文件并退出编辑器。

### 步骤 3: 重新启动SSH服务
修改过配置文件后,需要重新启动SSH服务以使更改生效。您可以使用以下命令来重新启动SSH服务:
```sh
sudo systemctl restart sshd
```
或者
```sh
sudo service sshd restart
```

注意和警告: 启用弱或过时的密钥类型会降低安全性。如果可能,请总是优先更新和调整客户端配置以使用更安全的密钥类型,例如 `ed25519` 或 `rsa`(密钥长度至少为2048位)。 应该仅在绝对必要并了解相关风险的情况下,才考虑支持旧的密钥类型。在可能的情况下,最好确保所有SSH客户端都是最新的,并且使用强密钥类型和算法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/221823
推荐阅读
相关标签
  

闽ICP备14008679号