临时解决 Mac SSH 客户端与服务器算法不匹配问题

1. 问题现象

执行 SSH 连接命令时出现如下报错:

bash 复制代码
$ ssh <USERNAME>@<HOST_IP>
Unable to negotiate with <HOST_IP> port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

2. 问题原因

  • 目标服务器(<HOST_IP>)仅支持 ssh-rsa 和 ssh-dss 这两种较旧的主机密钥签名算法。
  • 客户端(Mac 上的 OpenSSH)出于安全考虑,已默认禁用或降低了这些算法的优先级,导致无法协商成功。

3. 解决方案

3.1 临时解决(单次连接)

在 ssh 命令中临时允许使用 ssh-rsa 算法:

bash 复制代码
ssh -o HostKeyAlgorithms=+ssh-rsa <USERNAME>@<HOST_IP>

如果仍报公钥算法错误,可同时添加公钥算法选项:

bash 复制代码
ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa <USERNAME>@<HOST_IP>

注:旧版 OpenSSH 中 PubkeyAcceptedAlgorithms 可能写作 PubkeyAcceptedKeyTypes,请根据客户端版本调整。

3.2 永久解决(修改配置)

编辑(或创建)用户目录下的 SSH 配置文件 ~/.ssh/config,为指定服务器添加如下配置:

markdown 复制代码
Host <HOST_IP>
    HostKeyAlgorithms +ssh-rsa
    PubkeyAcceptedAlgorithms +ssh-rsa

保存后,直接使用 ssh <USERNAME>@<HOST_IP> 即可自动应用配置。

4. 安全说明

  • ssh-rsa 和 ssh-dss 均基于 SHA-1 哈希算法,存在已知的安全弱点(如碰撞攻击风险)。
  • 长期解决方案建议升级服务器端的 SSH 服务,使其支持更安全的算法(如 rsa-sha2-256、rsa-sha2-512 或 ed25519)。
  • 如果服务器无法升级,以上配置可作为临时或受控环境下的兼容措施。
相关推荐
小小张说故事1 小时前
Python 的 str 为什么设计成不可变?拆开字符串驻留、字符串池,以及 += 拼接到底慢在哪
后端·python
AI架构师之家1 小时前
我把 Hermes 这匹"马"养了两周,它干了一件让我有点发毛的事
后端
dpharness1 小时前
块协议用了两周,我把九个坑按顺序记下来了
后端
加宝的起点雷达1 小时前
跑了两周的信号日报,我把降级链改了四次
人工智能·后端
IT枫斗者枫哥2 小时前
CompletableFuture失败后返回空列表:异常没了,业务含义也变了
java·后端
Gopher_HBo2 小时前
opentelemetrySDK源码解析
后端
UrbanJazzerati2 小时前
AutoHotkey v2 零基础快速入门 Part 10:给路线回放添加高精度计时,理解累计延迟与路线一致性
后端
70后写java的老码农2 小时前
Spring Boot 3 + ShardingSphere-JDBC 实战:一次把读写分离和分库分表跑通
后端
泡海椒2 小时前
04-饼图评级构成-信用评级构成
后端
知守观2 小时前
多模块架构演进:横向分层 vs 纵向领域,13 个真实项目的切分对照
java·后端·微服务