ssh 报错:sign_and_send_pubkey: no mutual signature supported

目录
[隐藏]

1 问题描述

在将 Macbook 系统升级至 13.5 版本后,git pull -r 拉取代码报错如下:

sign_and_send_pubkey: no mutual signature supported
Permission denied (publickey).
fatal: Could not read from remote repository.

2 原因分析

openssh 8.2 版本后默认禁用 ssh-rsa算法,因为该算法存在安全隐患,参考:OpenSSH to deprecate SHA-1 logins due to security risk

对于 ssh 登录,更为推荐的是改用 Ed25519 算法。于是有两种解决办法:手动启用 ssh-rsa 或改用生成 Ed25519 算法的 key。

3 解决办法

3.1 解决方案一:手动启用 ssh-rsa 算法

执行如下代码,创建 ~/.ssh/config 文件即可:

ls ~/.ssh
echo "PubkeyAcceptedKeyTypes +ssh-rsa" > ~/.ssh/config

PubkeyAcceptedKeyTypes +ssh-rsa 是一个 OpenSSH 密钥验证策略,它表示服务器接受以 ssh-rsa 格式签名的公钥进行身份验证。这个策略只适用于 OpenSSH 服务器。

3.2 解决方案二:重新生成 Ed25519 算法的 key

以下以 macOS 为例,执行如下命令生成 ed25519 算法的公钥与私钥,然后将复制的公钥配置到 git 代码平台即可。

# 生成 ed25519 算法的公钥与私钥
ssh-keygen -t ed25519 -C "your_email@example.com"

# 复制公钥到剪切板(macOS)
cat ~/.ssh/github_ed25519.pub | pbcopy

3.3 附:为特定站点设置独立的 ssh 配置

ssh-keygen 可以指定 -f 参数自定义生成 key 的名称。示例:

ssh-keygen -t ed25519 -C "your_email@example.com" -f github_ed25519

然后编辑 ~/.ssh/config 文件,并在其中配置特定站点使用指定的 key 文件即可。示例:

vi ~/.ssh/config

参考添加如下配置(针对 github 站点):

Host github
  Hostname github.com
#  ProxyCommand connect -H localhost:1080  %h %p
  User git
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/github_ed25519
点赞 (0)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code