深入解析:SSH 密钥从 RSA 到 Ed25519

news/2025/11/29 13:25:22/文章来源:https://www.cnblogs.com/yangykaifa/p/19286187

文章目录

    • 问题背景
    • 为什么会出现 Ed25519
      • SSH 密钥算法的变迁
      • 什么时候开始变化的
    • Ed25519 到底是什么
      • 技术层面的优势
      • 实际使用中的体验
    • 如何解决克隆问题
      • 第一步:确认你的密钥
      • 第二步:查看你添加到 Git 平台的是哪个公钥
      • 第三步:添加正确的公钥
      • 第四步:测试连接
      • 如果你有多个密钥
    • 拓展知识
      • 如果我想继续用 RSA 呢
      • 其他的密钥算法
      • 密钥的安全管理
      • 密钥权限问题
      • 密钥的备份
      • Git 平台的支持情况
      • 什么时候需要重新生成密钥
    • 总结

问题背景

最近帮几个同事排查 git clone 失败的问题,发现了一个有意思的现象。他们的报错信息都类似:

Permission denied (publickey).
fatal: Could not read from remote repository.

一开始以为是网络问题、权限配置错了、生成sshkey时添加了密码,结果检查发现,这些同事的 .ssh 目录下都有密钥文件,但文件名多了两个,而且不是我们熟悉的 id_rsa 和 id_rsa.pub,而是 id_ed25519 和 id_ed25519.pub。

更有意思的是,他们都说自己按照网上教程生成了 SSH 密钥,也把公钥添加到了 GitLab 上。把原来配置到 gitlab 上的公钥删除,将 id_rsa.pub 里的文本拷贝重新添加,还是会提示报错。

这个问题其实挺典型的,反映了一个技术迁移期的常见困扰:工具的默认行为变了,但我们的认知还停留在过去。

为什么会出现 Ed25519

先说结论:这不是 bug,而是一种进步。

SSH 密钥算法的变迁

早些年,当运行 ssh-keygen 命令时,默认生成的是 RSA 算法的密钥对。RSA 是一种非常成熟的非对称加密算法,从 1977 年就开始使用了,安全性经过了时间的检验。

但随着计算能力的提升和密码学研究的发展,RSA 也暴露出一些问题。比如为了保证安全性,RSA 密钥长度需要不断增加,现在通常推荐使用 2048 位甚至 4096 位。密钥越长,生成和验证的时间就越长。

Ed25519 是基于椭圆曲线密码学的一种算法,在 2011 年左右被提出。它的设计目标就是在保证安全性的同时,提供更好的性能。

什么时候开始变化的

OpenSSH 在较新的版本中开始推荐使用 Ed25519。具体来说:

  • OpenSSH 6.5 版本(2014 年)开始支持 Ed25519
  • 一些 Linux 发行版和 macOS 的新版本中,ssh-keygen 的默认行为开始倾向于 Ed25519
  • Git 官方文档和 GitHub 的帮助文档也开始推荐 Ed25519

所以如果你最近重装了系统,或者升级了 Git 和 OpenSSH,很可能就会遇到这个变化。

Ed25519 到底是什么

简单来说,Ed25519 是一种现代的公钥加密算法,专门为数字签名设计。

技术层面的优势

和 RSA 相比,Ed25519 有这些特点:

安全性更高

Ed25519 使用 256 位的密钥长度,但提供的安全强度相当于 RSA 3072 位。这得益于椭圆曲线密码学的数学特性。而且它的设计从一开始就考虑了各种已知的攻击方式,包括侧信道攻击。

性能更好

密钥生成速度快很多。在我的机器上测试,生成一个 Ed25519 密钥几乎是瞬间完成,而生成 RSA 4096 位密钥需要几秒钟。

签名和验证的速度也更快。虽然在日常使用中这个差异不太明显,但在需要频繁进行 SSH 连接的场景下,累积起来还是能感觉到的。

密钥更短

Ed25519 的公钥只有 68 个字符左右,而 RSA 2048 位的公钥有 372 个字符以上。这让复制粘贴变得更方便,出错的概率也更小。

实际使用中的体验

老实说,对于普通用户来说,RSA 和 Ed25519 在日常使用中的差异几乎感觉不到。你不会因为换了 Ed25519 就觉得 git clone 快了多少。

但从技术债务的角度考虑,现在开始用 Ed25519 是个明智的选择。它代表了未来的方向,各大平台的支持也越来越好。

如何解决克隆问题

回到最开始的问题,既然本地生成的是 Ed25519 密钥,那解决方案其实很简单。

第一步:确认你的密钥

先看看你的 .ssh 目录下有什么:

ls -la ~/.ssh/

你可能会看到这些文件:

id_rsa
id_rsa.pub
id_ed25519
id_ed25519.pub

如果同时存在 RSA 和 Ed25519 密钥,那说明你之前生成过 RSA,后来又生成了 Ed25519。

第二步:查看你添加到 Git 平台的是哪个公钥

登录 GitHub、GitLab 或者 Gitee,进入 SSH Keys 的设置页面,看看你之前添加的公钥内容。

RSA 公钥通常以 ssh-rsa AAAA... 开头。
Ed25519 公钥以 ssh-ed25519 AAAA... 开头。

第三步:添加正确的公钥

如果你想用 Ed25519(推荐),那就把新公钥添加到 Git 平台:

cat ~/.ssh/id_ed25519.pub

复制输出的内容,不同的平台配置路径不同:

  • GitHub:Settings → SSH and GPG keys → New SSH key
  • GitLab:Preferences → SSH Keys
  • Gitee:设置 → SSH 公钥

把复制的内容粘贴进去,给这个密钥起个名字(比如"我的工作电脑",默认会生成一个名字),保存。

第四步:测试连接

添加完公钥后,测试一下:

ssh -T git@github.com

如果看到类似"Hi username! You’ve successfully authenticated"的消息,就说明配置成功了。

如果你有多个密钥

有些人可能需要在同一台机器上使用多个 Git 账号,或者需要连接多个不同的 Git 服务器。这时候就需要配置 SSH config 文件。

创建或编辑 ~/.ssh/config 文件:

nano ~/.ssh/config

添加类似这样的配置:

Host github.comHostName github.comUser gitIdentityFile ~/.ssh/id_ed25519
Host github-workHostName github.comUser gitIdentityFile ~/.ssh/id_rsa_work
Host gitlab.comHostName gitlab.comUser gitIdentityFile ~/.ssh/id_ed25519

这样你就可以为不同的 Host 指定不同的密钥。使用时,可以这样克隆:

git clone git@github-work:company/repo.git

拓展知识

如果我想继续用 RSA 呢

虽然不推荐,但如果你确实需要生成 RSA 密钥(比如要连接的服务器太老,不支持 Ed25519),可以这样:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

这里 -t 指定算法类型,-b 指定密钥长度,-C 添加一个注释(通常用邮箱)。

其他的密钥算法

除了 RSA 和 Ed25519,还有其他一些算法:

ECDSA

这也是基于椭圆曲线的算法,在 Ed25519 流行之前比较常用。但现在一般直接推荐 Ed25519,因为它的设计更简洁,安全性审查更充分。

DSA

这是很老的算法了,OpenSSH 7.0 之后已经默认禁用。如果你看到 id_dsa 这样的文件,强烈建议换掉。

密钥的安全管理

生成密钥时,ssh-keygen 会询问你是否设置 passphrase(密码短语)。这是一个额外的保护层:即使有人拿到了你的私钥文件,没有 passphrase 也无法使用。

建议设置 passphrase,但这样每次使用密钥时都需要输入。可以配合 ssh-agent 使用,输入一次密码后,在当前会话中就不用重复输入了:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

在 macOS 上,还可以把密码存到 Keychain 里:

ssh-add --apple-use-keychain ~/.ssh/id_ed25519

密钥权限问题

SSH 对密钥文件的权限要求很严格。私钥文件必须只有所有者可读:

chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub

.ssh 目录本身的权限也要正确:

chmod 700 ~/.ssh

如果权限不对,SSH 会拒绝使用这个密钥,这也是一个常见的报错原因。

密钥的备份

私钥是你身份认证的唯一凭证,丢了就麻烦了。建议:

  • 把私钥备份到安全的地方(加密的移动硬盘、密码管理器等)
  • 不要把私钥存到云盘或者发给别人
  • 如果怀疑私钥泄露,立即删除对应的公钥,重新生成新的密钥对

Git 平台的支持情况

主流的 Git 托管平台都已经支持 Ed25519:

如果你的公司使用的是很老的自建 Git 服务器,可能需要确认一下是否支持 Ed25519。

什么时候需要重新生成密钥

这些情况下建议重新生成:

  • 私钥可能泄露了
  • 电脑丢失或被盗
  • 离职换工作
  • 很多年没有更新过(虽然密钥理论上可以一直用,但定期更换是个好习惯)
  • 当前使用的是很老的算法(比如 DSA 或者短密钥的 RSA)

总结

从 RSA 到 Ed25519,这是技术进步的必然趋势。虽然在迁移过程中会遇到一些小问题,但长远来看,使用更现代、更安全的算法是值得的。

如果你现在正在配置新的开发环境,建议直接使用 Ed25519。如果你已经在使用 RSA 密钥且运行良好,也不用急着换,等到下次重装系统或者遇到问题时再切换也不迟。

最重要的是理解这个变化的原因和背景,这样遇到问题时就不会慌张,知道该往哪个方向排查。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/980754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

停止背诵 API:AI 时代,代码只是你的“外设”

时代的断层:从“精确记忆”到“模糊检索” 在很长一段时间里,编程被定义为一种对精确性有着变态要求的技能。 你需要像背字典一样记住 C 语言的标准库,你需要清楚地知道一个 API 的第三个参数传的是指针还是引用。那…

2025国产冻干机品牌TOP5权威推荐:实验室冻干设备甄选指

科研与医药领域中,冻干技术作为样品活性保存、工艺优化的核心支撑,需求持续攀升。2024年数据显示,国内实验室冻干机市场规模超30亿元,年增速35%,但42%的科研机构投诉集中在性能虚标、真空不稳、售后滞后三大问题—…

2025年十大乡村别墅设计服务排行榜,新测评精选设计公司推荐

为帮乡村建房客户高效锁定适配自身需求的别墅设计合作伙伴,避免自建房走弯路,我们从设计落地适配性(如宅基地地形匹配、户型功能合理性)、施工品质把控(含建材标准、工艺规范)、全周期服务透明性(覆盖勘探到交付…

2025年广东知名机器人研发生产厂家推荐,资深研发与服务生产

在智能制造浪潮席卷全球的当下,工业机器人作为制造业皇冠上的明珠,正成为企业降本增效、突破技术瓶颈的核心利器。广东作为中国工业大省,机器人产业集群效应显著,但市场上供应商鱼龙混杂,如何选择广东机器人靠谱研…

2025年靠谱的心理智能体开发专业公司排名:售后完善、诚信企

在数字化与心理健康需求爆发的双重驱动下,心理智能体正成为医疗、教育、企业EAP等领域的智能服务新基建。然而,市场上心理智能体开发公司鱼龙混杂,技术实力参差不齐。以下依据技术专业性、售后保障、诚信口碑三大核…

unprofitable25,4

慢慢的也能做好 11.26超清 11.26 一道又一道的标记 无限制 11.24 谈谈 11.23https://matt.might.net/articles/how-to-blog-as-an-academic/

Kafka入门:从初识到Spring Boot实战

回顾完RabbitMQ,再跟我一起回顾下Kafka ~ 一、Kafka介绍 1. 什么是Kafka? Kafka是由Apache软件基金会开发的分布式流处理平台,最初由LinkedIn公司设计,现已成为大数据领域核心的消息中间件。它能处理实时数据流,支…

VFox版本管理工具使用教程

官网 https://vfox.dev/zh-hans/guides/intro.html Github:https://github.com/version-fox/vfox 使用教程: 简单安装使用(Java JDK使用为例) 安装在Releases下载最新版本的zip安装包 配置PATH环境变量,将vfox安装目…

unprofitable25,5

11https://matt.might.net/articles/how-to-blog-as-an-academic/

2025年浙江电子汽车衡年度排名:电子汽车衡制造商、诚信的防

在工业称重领域,电子汽车衡作为物流、化工、港口等场景的核心设备,其精度、稳定性与定制化能力直接影响企业运营效率与安全合规。面对市场上鱼龙混杂的供应商,如何选择兼具技术实力、诚信口碑与定制能力的合作伙伴?…

FileGDB代码示例

FileGDB代码示例 1. 读取FileGDB图层 1.1 实现思路graph TDA[注册OGR] --> B[设置中文路径支持]B --> C[打开数据驱动]C --> D[打开数据源]D --> G[获取图层]G --> H[读取图层信息]1.2 代码示例public …

2025年中国十大比较好的AI智能客服企业推荐:口碑好且资质

本榜单依托全维度市场调研与真实行业口碑,深度筛选出十家标杆企业,重点围绕技术实力、服务体验、资质合规、客户反馈四大核心维度,为企业选型提供客观依据,助力精准匹配适配的服务伙伴。 TOP1 推荐:广州市塔灯人工…

07-实战案例与最佳实践

第七章:实战案例与最佳实践 7.1 案例一:参数化建模工具 7.1.1 需求分析 参数化建模是现代CAD系统的核心功能之一。本案例将实现一个参数化齿轮建模工具,用户可以通过调整参数动态生成齿轮模型。 功能需求:支持设置…

06-二次开发进阶

第六章:二次开发进阶 6.1 自定义渲染器 6.1.1 渲染管线概述 Chili3D的渲染基于Three.js,理解其渲染管线对于自定义渲染至关重要: 场景图(Scene Graph)↓ 几何体处理(Geometry Processing)↓ 材质着色(Material Shad…

2025年哈尔滨精密轴承企业综合实力前十强排行榜

我们优先筛选了通过国际、国内双重认证的企业 —— 比如 ISO9001 质量管理体系(这是基础)、GJB9001A 军工质量管理体系(针对高端装备领域)、TS16949 汽车行业认证(汽车轴承的 “入场券”),还有 AS9100 航空航天…

05-二次开发入门

第五章:二次开发入门 5.1 开发环境配置 5.1.1 推荐开发工具 进行Chili3D二次开发,推荐使用以下开发工具: 代码编辑器:Visual Studio Code(推荐):免费、开源、功能强大 JetBrains WebStorm:专业的Web开发IDE推荐…

04-用户界面与交互系统

第四章:用户界面与交互系统 4.1 UI架构概述 4.1.1 组件化设计 Chili3D的用户界面采用组件化设计,将复杂的界面分解为可复用的小组件。这种设计使得代码更容易维护、测试和扩展。 核心UI包结构: packages/chili-ui/s…

2025年中国AI智能客服公司排名:高性价比的AI智能客服品

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆企业,为企业选型提供客观依据,助力精准匹配适配的服务伙伴。 TOP1 推荐:广州市塔灯人工智能科技有限公司 推荐指数:★★★★★ 口碑评分:国内首推的…

【音视频】WebRTC连接建立流程详解 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

玻璃反应釜生产厂TOP5权威推荐:专业选型、价格解析与低温适

化工、医药、科研领域的实验与生产中,玻璃反应釜是核心设备之一。2024年行业数据显示,国内玻璃反应釜市场规模突破60亿元,年增速达28%,但用户投诉中35%集中在专业度不足价格虚高低温性能不达标三大问题——某药企因…