临时解决 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)。
  • 如果服务器无法升级,以上配置可作为临时或受控环境下的兼容措施。
相关推荐
小锋java12342 小时前
LangChain4j 来了,Java AI智能体开发再次起飞。。。
java·人工智能·后端
一点一一2 小时前
nestjs+langchain:Prompt Template
人工智能·后端
Oneslide2 小时前
低版本kubernetes节点卡死重置恢复方法
后端
spring2997922 小时前
Spring Boot 实战篇(四):实现用户登录与注册功能
java·spring boot·后端
Rust语言中文社区3 小时前
【Rust日报】Clone:像进程一样 fork 虚拟机的 Rust KVM VMM
开发语言·后端·rust
uzong3 小时前
架构师的必修课:分布式系统发布理论设计要点
后端·架构
程序员cxuan3 小时前
vibe coding 凉了,wish coding 来了
人工智能·后端·程序员
货拉拉技术3 小时前
一单多运履约平台的架构演进之路
后端
金融大 k3 小时前
Spring Boot WebSocket 实时行情推送实战:从断线重连到并发优化
spring boot·后端·websocket