跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash大前端

Git SSH 公钥认证失败 Permission denied (publickey) 解决方法

对 Git 操作 GitHub 时出现的 Permission denied (publickey) 错误进行解析。主要原因为本地未生成 SSH 密钥、公钥未添加至 GitHub 账号或密钥配置错误。提供两种解决方案:一是生成 ED25519 格式 SSH 密钥对并上传公钥至 GitHub 实现永久免密认证;二是改用 HTTPS 链接配合个人访问令牌临时解决。文末包含多密钥配置、验证连接及避坑指南,帮助开发者快速恢复 Git 远程仓库访问。

ApiHolic发布于 2026/3/27更新于 2026/7/1138 浏览

Git 报错解决:SSH 公钥认证失败(Permission denied (publickey))

在通过 SSH 协议操作 GitHub 远程仓库(克隆、拉取、推送)时,经常会遇到 Permission denied (publickey) 报错,这是新手配置 Git 与 GitHub 连接时的高频问题。本文将详细拆解报错原因、两种高效解决方法(永久/临时),以及验证和避坑技巧。

一、报错场景还原

执行涉及 SSH 协议的 Git 命令时触发报错,常见场景包括:

# 场景 1:克隆远程仓库
git clone [email protected]:用户名/仓库名.git

# 场景 2:拉取远程仓库内容
git pull origin main

# 场景 3:推送本地内容到远程仓库
git push -u origin main

终端输出核心报错信息:

git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.

二、核心报错原因

该报错的本质是 SSH 身份认证失败,GitHub 无法通过你本地的 SSH 密钥验证你的账号身份,从而拒绝你的仓库访问请求。常见具体原因包括:

  1. 本地未生成任何 SSH 密钥对(无公钥/私钥可供认证);
  2. 本地已生成 SSH 密钥,但公钥未添加到你的 GitHub 账号中;
  3. 本地存在多个 SSH 密钥,未配置密钥映射,导致 Git 使用了错误的密钥进行认证;
  4. 生成的 SSH 密钥格式不被 GitHub 支持(推荐 ED25519 或 RSA 格式)。

三、解决方案(两种方案,按需选择)

方案 1:配置 SSH 密钥(永久解决,推荐长期使用)

该方案通过生成 SSH 密钥对,并将公钥添加到 GitHub 账号,实现永久免密认证,后续操作 SSH 协议仓库无需重复验证。

步骤 1:生成 SSH 密钥对
  1. 执行后终端会出现一系列交互提示,全部按回车默认即可:
    • 提示「Enter file in which to save the key」:默认存储路径(Windows 为 C:\Users\你的用户名\.ssh\,Mac/Linux 为 ~/.ssh/),无需修改;
    • 提示「Enter passphrase」:密钥密码(留空则无需密码,后续操作无需输入,推荐新手留空);
    • 提示「Enter same passphrase again」:重复密钥密码,留空则直接回车。
  2. 执行完成后,会在默认存储路径下生成两个文件(无后缀为私钥,.pub 后缀为公钥):
    • 私钥:id_ed25519(核心机密,切勿泄露、删除或修改);
    • 公钥:id_ed25519.pub(用于上传到 GitHub,可公开分享)。

打开 Git Bash(Windows)或 Terminal(Mac/Linux),执行以下命令生成 ED25519 格式密钥(安全性更高,推荐),替换为你的 GitHub 注册邮箱:

ssh-keygen -t ed25519 -C "你的 GitHub 注册邮箱@example.com"
步骤 2:读取并复制公钥内容

执行以下命令,读取公钥文件的完整内容并复制:

cat ~/.ssh/id_ed25519.pub

终端会输出一串以 ssh-ed25519 开头、你的 GitHub 邮箱结尾的字符串,完整复制该字符串(不要遗漏任何字符,包括开头的协议和结尾的邮箱)。

步骤 3:将公钥添加到 GitHub 账号
  1. 登录你的 GitHub 账号,点击右上角头像 → 选择「Settings」(设置);
  2. 在左侧导航栏中,找到并点击「SSH and GPG keys」(SSH 和 GPG 密钥);
  3. 点击页面右上角「New SSH key」(新建 SSH 密钥);
  4. 填写密钥信息:
    • 「Title」:填写备注(如「Windows-办公电脑」「Mac-个人笔记本」,便于区分多个设备);
    • 「Key type」:选择「Authentication key」(认证密钥);
    • 「Key」:粘贴刚才复制的公钥完整字符串(确保无空格、无换行、无遗漏);
  5. 点击「Add SSH key」(添加 SSH 密钥),完成公钥配置(若弹出 GitHub 账号密码验证,输入密码或个人访问令牌即可)。
步骤 4:验证 SSH 连接是否成功

回到 Git Bash/Terminal,执行以下命令验证与 GitHub 的 SSH 连接:

ssh -T [email protected]
  1. 首次执行会提示「Are you sure you want to continue connecting (yes/no)?」,输入「yes」并回车;

若终端输出以下内容,说明 SSH 认证配置成功:

Hi 你的 GitHub 用户名!You've successfully authenticated, but GitHub does not provide shell access.
方案 2:改用 HTTPS 链接(临时解决,快速上手)

若暂时不想配置 SSH 密钥,可直接改用 GitHub 仓库的 HTTPS 链接,绕过 SSH 认证,快速完成仓库操作。

步骤 1:获取仓库的 HTTPS 链接

登录 GitHub,进入目标仓库页面,点击「Code」按钮,在弹出的窗口中切换到「HTTPS」标签,复制对应的 HTTPS 链接(格式为 https://github.com/用户名/仓库名.git)。

步骤 2:替换远程仓库链接(若已关联 SSH 链接)

若本地已关联过该仓库的 SSH 链接,先修改远程仓库链接为 HTTPS 格式:

# 替换为你的仓库 HTTPS 链接
git remote set-url origin https://github.com/用户名/仓库名.git

若未关联过远程仓库,直接执行关联命令:

git remote add origin https://github.com/用户名/仓库名.git
步骤 3:执行 Git 操作(拉取/推送)

后续执行拉取、推送命令即可,例如:

# 拉取远程仓库内容
git pull origin main --allow-unrelated-histories

# 推送本地内容到远程仓库
git push -u origin main

执行后会弹出登录提示,用户名输入你的 GitHub 账号名,密码输入你的 GitHub 个人访问令牌(GitHub 已不再支持直接输入账号密码,个人访问令牌需在 GitHub 账号「Settings」→「Developer settings」→「Personal access tokens」中生成,权限勾选「repo」即可)。

四、补充技巧与避坑指南

  1. 多 SSH 密钥配置:若一台设备需要关联多个 GitHub 账号,需在 .ssh 目录下创建 config 文件,配置密钥与账号的映射关系,避免认证冲突;
  2. 密钥丢失/失效处理:若设备重装系统、删除 .ssh 目录导致密钥丢失,只需重新生成密钥对并上传公钥到 GitHub 即可,旧公钥可在 GitHub 账号中删除;
  3. 优先选择 ED25519 格式:相比传统 RSA 格式,ED25519 密钥更安全、体积更小,兼容性更好(GitHub 全面支持),避免使用过时的 DSA 格式;
  4. 验证远程仓库链接:执行 Git 操作前,可通过 git remote -v 查看当前关联的远程仓库链接,确认格式正确(SSH/HTTPS 对应无误);
  5. 避免私钥泄露:私钥(id_ed25519/id_rsa)是账号认证的核心,切勿分享给他人,也不要上传到公共仓库中(可在 .gitignore 中忽略 .ssh 目录)。

目录

  1. Git 报错解决:SSH 公钥认证失败(Permission denied (publickey))
  2. 一、报错场景还原
  3. 场景 1:克隆远程仓库
  4. 场景 2:拉取远程仓库内容
  5. 场景 3:推送本地内容到远程仓库
  6. 二、核心报错原因
  7. 三、解决方案(两种方案,按需选择)
  8. 方案 1:配置 SSH 密钥(永久解决,推荐长期使用)
  9. 步骤 1:生成 SSH 密钥对
  10. 步骤 2:读取并复制公钥内容
  11. 步骤 3:将公钥添加到 GitHub 账号
  12. 步骤 4:验证 SSH 连接是否成功
  13. 方案 2:改用 HTTPS 链接(临时解决,快速上手)
  14. 步骤 1:获取仓库的 HTTPS 链接
  15. 步骤 2:替换远程仓库链接(若已关联 SSH 链接)
  16. 替换为你的仓库 HTTPS 链接
  17. 步骤 3:执行 Git 操作(拉取/推送)
  18. 拉取远程仓库内容
  19. 推送本地内容到远程仓库
  20. 四、补充技巧与避坑指南
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 学得会、做得出、能展示!12493+基于Web的校园二手商品交易系统设计与实现 全套资料打包送,学习更高效!
  • Qwen3-VL-WEBUI 开箱即用:Instruct 与 Thinking 模式实战
  • 数据结构:单链表与双链表的操作详解
  • C++ 中 lower_bound 与 upper_bound 函数详解
  • 通过 Ambari API 添加服务时解决 CSRF 保护错误的方法
  • 罗马数字转整数:Python 算法实现
  • 理解 RAG 真实边界:Spring AI 三种架构落地实践
  • Vue render 函数核心用法与参数解析
  • OpenClaw AI 编程上下文 Token 限制剖析与扩容实战
  • Linux 环境变量详解:概念、操作与代码获取
  • MySQL Workbench 图形化管理工具的安装与使用指南
  • 鸿蒙金融理财全栈项目:基础架构、数据安全与用户体验
  • 网络安全笔记:信息安全工程师与网络安全工程师考试大纲及 Web 安全大纲
  • 文心大模型 4.5 开源实测:快速部署与多模态识别能力测评
  • GESP C++ 二级认证选择题解析(第 9 至 15 题)
  • OpenClaw 单实例配置多 Agent、多 QQ 及飞书机器人
  • Flink 批计算单词统计示例
  • LFM2.5-1.2B-Thinking-GGUF 模型部署与 llama.cpp 运行原理详解
  • Xilinx FPGA 驱动 USB3.0 外设实战指南
  • 前端无障碍性开发指南:提升网站可访问性

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online