Unable to negotiate with 192.168.20.214 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss翻译
时间: 2025-07-04 11:16:32 浏览: 43
当遇到 SSH 连接问题 `Unable to negotiate with IP port 22: no matching host key type found. Their offer: ssh-rsa, ssh-dss` 时,这通常意味着客户端与服务器之间无法就使用的主机密钥类型达成一致。该问题在较新版本的 OpenSSH 客户端中尤为常见,尤其是 macOS 系统用户连接旧版 SSH 服务器时。
---
### 原因分析
OpenSSH 在其更新版本(如 7.0 及以上)中默认禁用了对一些老旧的密钥算法的支持,例如 `ssh-rsa` 和 `ssh-dss`。如果目标服务器仍然使用这些旧算法作为其唯一可用的主机密钥类型,则会导致密钥协商失败,从而阻止连接[^1]。
---
### 解决方案
#### 方法一:修改 SSH 客户端配置以启用旧密钥类型
可以在本地 SSH 配置文件中临时允许使用旧的主机密钥类型。
编辑或创建 SSH 客户端配置文件:
```bash
nano ~/.ssh/config
```
添加以下内容(以允许 `ssh-rsa` 为例):
```plaintext
Host your.target.ip.address
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
```
保存并退出后尝试重新连接:
```bash
ssh [email protected]
```
> 注意:建议仅针对特定主机启用此设置,而非全局启用,以避免降低安全性[^2]。
#### 方法二:命令行参数临时启用
也可以在命令行中直接通过 `-o` 参数指定允许使用旧密钥类型:
```bash
ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa [email protected]
```
这种方式适用于临时测试或一次性连接需求。
#### 方法三:升级目标服务器的 SSH 配置
更安全、长期的解决方案是更新目标服务器上的 SSH 配置,使其支持现代密钥算法(如 `rsa-sha2-256` 或 `ecdsa-sha2-nistp256`)。编辑 `/etc/ssh/sshd_config` 并确保以下设置存在且未被注释:
```plaintext
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
```
重启 SSH 服务以应用更改:
```bash
sudo systemctl restart sshd
```
这样可以提升安全性并兼容现代 SSH 客户端[^3]。
---
### 安全建议
虽然上述方法能解决连接问题,但应尽量避免长期依赖不安全的旧算法。`ssh-rsa` 和 `ssh-dss` 已被认为不够安全,尤其是在 DSA (`ssh-dss`) 中存在严格的密钥长度限制和签名机制缺陷。因此,推荐升级服务器端配置以支持更强的密钥类型。
---
阅读全文
相关推荐

















