临时解决 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-rsassh-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-rsassh-dss 均基于 SHA-1 哈希算法,存在已知的安全弱点(如碰撞攻击风险)。
  • 长期解决方案建议升级服务器端的 SSH 服务,使其支持更安全的算法(如 rsa-sha2-256rsa-sha2-512ed25519)。
  • 如果服务器无法升级,以上配置可作为临时或受控环境下的兼容措施。
相关推荐
IT_陈寒1 小时前
Python闭包里藏的这个坑,差点让我加班到凌晨
前端·人工智能·后端
IT_陈寒1 小时前
Java注解空指针?这个坑我踩得莫名其妙
前端·人工智能·后端
土狗TuGou2 小时前
SQL内功笔记 · 第8篇:事务的四大特性与隔离级别
数据库·笔记·后端·sql·mysql·oracle
ZengLiangYi2 小时前
React Query + REST API 最佳实践
javascript·后端·react.js
星浩AI2 小时前
项目实战:合同智能审批 · LangGraph + HITL 人机协同方案 [有源码]
后端·langchain·agent
JavaGuide2 小时前
Codex 接入第三方模型 DeepSeek、GLM、Kimi 教程:CC-Switch 和 Codex++ 两种方案对比
后端·ai编程
ZengLiangYi2 小时前
Fastify 加 Electron:把 Web 服务嵌进桌面应用
前端·javascript·后端
李白你好3 小时前
页面资产梳理 · 技术指纹识别 · Spring 端点探测
java·后端·spring
用户1753721240333 小时前
02《面向对象设计原则:SOLID原则实战解析》
后端
我是一颗柠檬3 小时前
【Java后端技术亮点】热Key探测与本地缓存二级防护:Redis热点问题的终极解决方案
java·redis·后端·缓存·中间件