You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub是否采用非对称SSH加密?为何仅需提交本地公钥无需交换?

GitHub SSH 加密机制与公钥疑惑解答

一、GitHub 采用的 SSH 加密类型

首先明确:SSH 协议本身就是基于非对称加密实现的,GitHub 支持多种标准的 SSH 密钥类型,目前官方首推的是:

  • ed25519:安全性能更高、生成的密钥更短,计算效率也更出色,是当前的最优选择
  • 同时也兼容 RSA(建议密钥长度至少 2048 位,4096 位更佳)、ECDSA 等经典类型

你可以用这条命令生成推荐的 ED25519 密钥:

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

二、为什么只需要提交本地公钥,不用主动获取 GitHub 的公钥?

这其实是 SSH 握手流程里的一个细节——不是真的“不需要”,而是这个验证过程在你第一次连接 GitHub 时已经自动完成了,只是你可能没留意到:

  1. 首次连接时的身份验证触发
    当你第一次用 SSH 命令连接 GitHub(比如执行 git clone git@github.com:xxx/xxx.git),终端会弹出类似这样的提示:

The authenticity of host 'github.com (140.82.113.4)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

这时候 GitHub 已经把它的公钥指纹展示给你了,你核对指纹(可以通过 GitHub 官方渠道确认这个指纹的真实性)后输入 yes,GitHub 的公钥就会被自动存入你本地的 ~/.ssh/known_hosts 文件里。

  1. 后续连接的自动校验
    之后每次你通过 SSH 和 GitHub 交互时,本地 SSH 客户端会自动从 known_hosts 里取出 GitHub 的公钥,和服务器发送的公钥做比对,确认对方身份合法后,才会继续加密通信。

  2. 只上传本地公钥的核心逻辑
    GitHub 存储你的本地公钥,是为了在你发起连接时,用你的公钥加密一段随机信息——只有你的本地私钥能解密这段信息,这样 GitHub 就能确认“你是你声称的那个用户”。而你这边已经通过首次连接完成了对 GitHub 公钥的验证和缓存,所以不需要再手动去获取和配置它的公钥。

简单总结:你提交公钥给 GitHub 是让它验证你的身份,而 GitHub 的公钥是你用来验证它的身份,这个验证步骤在首次连接时已经悄悄完成并缓存了,所以日常使用中感觉不到需要主动获取它的公钥。


内容的提问来源于stack exchange,提问作者Dickens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:34:51