Skip to content

SSH 连接错误 "sign_and_send_pubkey: no mutual signature supported" 解决方案

问题描述

当用户尝试通过终端连接 SSH 服务器时(特别是在新版本 macOS/Linux 中),经常遇到以下错误序列:

shell
sign_and_send_pubkey: no mutual signature supported
user@host: Permission denied (publickey).

该问题通常出现在以下场景:

  1. 使用 ssh -i key.pem user@host 命令时
  2. 密钥文件权限设置正确(如 400)
  3. 通过其他客户端(如 IntelliJ)连接相同服务器正常
  4. 系统升级后突然出现该错误

问题原因

SSH 协议的加密算法安全问题引发了此错误的核心原因:

  1. SHA-1 算法弃用:新版本 OpenSSH(>=8.8,2021年9月发布)默认禁用 ssh-rsa(使用弱签名算法 SHA-1)
  2. 密钥类型不匹配:服务器和客户端对签名算法支持不一致
  3. 遗留密钥问题:旧版生成的 RSA 密钥使用 SHA-1 签名,无法满足现代安全要求

技术背景

OpenSSH 8.8 开始默认禁用 ssh-rsa 算法,强制使用更强的 rsa-sha2-256rsa-sha2-512。当服务器未启用兼容算法时引发此冲突。

🟢 首选方案:生成现代密钥(Ed25519 算法)

最安全可靠的解决方法是创建新的 Ed25519 密钥对(现代算法,更安全):

bash
# 生成 Ed25519 密钥(支持最新算法)
ssh-keygen -t ed25519 -a 100

# 添加密钥到 SSH-agent
ssh-add ~/.ssh/id_ed25519

# 将公钥上传到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host

配置客户端默认使用新密钥:

ssh
Host *
    IdentityFile ~/.ssh/id_ed25519
服务端配置检查

确保服务器支持新算法(/etc/ssh/sshd_config):

:filepath:/etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_ed25519_key
HostKeyAlgorithms ssh-ed25519

执行 sudo systemctl restart sshd 重启服务

⚠️ 临时解决方案 A:修改 SSH 配置文件

对于无法立即更换密钥的情况,可临时启用兼容模式:

ssh
Host example.com  # 限制对特定主机生效
    PubkeyAcceptedKeyTypes=+ssh-rsa
    HostKeyAlgorithms=+ssh-rsa

安全警告

此方案降低安全性!仅应作为过渡方案:

  • 避免使用 Host * 全局配置
  • SHA1 算法存在已知漏洞
  • 尽快迁移到 Ed25519 或 RSA-SHA2

⚠️ 临时解决方案 B:命令行参数覆盖

单次连接临时启用旧算法:

bash
ssh -o PubkeyAcceptedKeyTypes=+ssh-rsa user@host

或强制使用 RSA-SHA256(若服务器支持):

bash
ssh -o PubkeyAcceptedKeyTypes=rsa-sha2-256 user@host

解决方案对比

方案安全性操作复杂度长期有效性适用场景
生成 Ed25519 密钥⭐⭐⭐⭐⭐ (最高)⭐⭐ (中等)⭐⭐⭐⭐⭐新环境搭建
服务端启用 RSA-SHA2⭐⭐⭐⭐⭐⭐⭐ (复杂)⭐⭐⭐⭐服务器可控时
客户端启用兼容模式⭐⭐ (低)⭐ (简单)⭐ (可能失效)紧急临时使用
命令行临时覆盖⭐ (最低)⭐⭐ (中等)⭐ (单次有效)快速测试

最佳实践建议

  1. 优先迁移到 Ed25519 算法

    bash
    # 生成高强度密钥
    ssh-keygen -t ed25519 -a 100 -f ~/.ssh/prod_key
  2. 逐步淘汰旧 RSA 密钥

  3. 服务器安全加固

    • 定期更新 SSH 服务
    • 禁用不安全的 ssh-rsa 算法
    • 使用证书认证替代普通密钥

版本检查

查看 OpenSSH 版本确定支持情况:

bash
ssh -V  # 输出示例: OpenSSH_9.2p1
  • <8.8:无此问题
  • =8.8:需实施上述解决方案

总结

解决 no mutual signature supported 错误的本质在于协调客户端与服务器间的密钥算法支持:

  1. 永久方案:迁移到 Ed25519 密钥(安全高效)
  2. 过渡方案:客户端配置兼容旧算法(仅临时使用)
  3. 应急方案:命令行参数覆盖(快速测试)

请优先选择生成新密钥的解决方案,这不仅是修复错误的方法,更是提升系统安全性的关键步骤。