Permission denied"如何解决?详解GitHub SSH密钥认证流程

"当你满心欢喜运行deploy.sh部署Vue项目到GitHub Pages,却突然看到: git@github.com: Permission denied (publickey).

本文将从零教你配置SSH密钥,彻底解决此类权限问题。"

  1. 核心流程
    1. 检查本地是否存在 SSH 密钥:

      • 打开你的终端,并执行以下命令(通常在你的用户主目录下):
      bash 复制代码
      ls -al ~/.ssh  # 查看是否存在id_rsa(私钥)和id_rsa.pub(公钥)这样的文件。
      #`id_rsa`:**私钥文件**(Private Key),必须严格保密,相当于你的"密码"。
      #`id_rsa.pub`:**公钥文件**(Public Key),可公开,用于配对验证,相当于"锁"。
      • 如果找不到 id_rsaid_rsa.pub 文件: 说明你还没有生成 SSH 密钥对,需要按照下面的步骤 2 生成。
      • 如果找到了这些文件: 请跳到步骤 3,将你的公钥添加到 GitHub。
    2. 生成新的SSH密钥对 (如果需要):

      • 生成命令(含注释):
      bash 复制代码
      ssh-keygen -t rsa -b 4096 -C "your_email@example.com"  
      # -t 指定密钥类型,-b 指定密钥长度,-C 添加注释(建议用你的 GitHub 账户关联的邮箱地址)
      • 交互提示中可直接回车使用默认路径(~/.ssh/id_rsa),也可以自定义路径。
      • 可选设置密钥密码(增加安全性,但自动化部署时可能需额外配置)。如果设置了密码,请记住这个密码。
    3. 将SSH 公钥添加到你的 GitHub 账户:

      1. 复制公钥内容: 使用以下命令将你的公钥复制到剪贴板(如果你的公钥文件名不是 id_rsa.pub,请替换成你的文件名):

        • macOS:

          bash 复制代码
          pbcopy < ~/.ssh/id_rsa.pub
        • Linux (需要 xclip):

          bash 复制代码
          xclip -sel clip < ~/.ssh/id_rsa.pub

          如果 xclip 没有安装,可以使用 cat 命令并手动复制:

          bash 复制代码
          cat ~/.ssh/id_rsa.pub
        • Windows (可以使用 clip 命令):

          bash 复制代码
          clip < ~/.ssh/id_rsa.pub

          或者使用文本编辑器打开 ~/.ssh/id_rsa.pub 文件并手动复制内容。

      2. 添加到 GitHub:

        arduino 复制代码
        * 登录你的 GitHub 账户。
        * 点击右上角的头像,然后选择 "Settings"。
        * 在左侧边栏中,点击 "SSH and GPG keys"。
        * 点击 "New SSH key" 或 "Add SSH key"。
        * 在 "Title" 字段中,为你的密钥添加一个描述性的名称(例如,"My Laptop")。
        * 在 "Key" 字段中,粘贴你刚刚复制的公钥。
        * 点击 "Add SSH key"。如果提示,输入你的 GitHub 密码进行确认。
    4. 测试 SSH 连接:

      • 验证命令:
      bash 复制代码
      ssh -T git@github.com  
      # 成功会显示"Hi username! You've successfully authenticated, but GitHub does not provide shell access."
      • 如果仍然出现 "Permission denied (publickey)" 错误,请仔细检查以下几点:
        • 你是否将正确的公钥 (以 .pub 结尾的文件内容)添加到了 GitHub?

        • 你的本地 SSH 密钥对是否存在,并且私钥 (id_rsa 或你自定义的文件名) 位于 ~/.ssh 目录下?

        • 如果你的私钥有密码,SSH agent 是否正在运行并且已经添加了你的私钥?你可以尝试添加私钥到 SSH agent(如果提示agent refused operation,需先启动ssh-agent):

          bash 复制代码
          eval "$(ssh-agent -s)"
          ssh-add ~/.ssh/id_rsa  # 如果你的私钥文件名不同,请替换
    5. 确保你的 Git 远程仓库 URL 使用 SSH:

      检查你的项目 .git/config 文件中的 remote "origin" url 是否是以 git@github.com: 开头。如果不是,你需要将其更改为 SSH URL。

      查看远程仓库 URL:

      Bash 复制代码
      git remote -v

      如果输出的 URL 是 https://github.com/<USERNAME>/<REPO>.git 这种 HTTPS 形式,你需要将其更改为 SSH 形式:

      Bash 复制代码
      git remote set-url origin git@github.com:<USERNAME>/<REPO>.git

      再次运行 git remote -v 确认 URL 已经更改。

  2. 密钥安全建议
    • 切勿将id_rsa文件上传到Git仓库或公开位置。
    • 定期轮换密钥(GitHub支持多密钥共存,删除旧密钥即可)。
相关推荐
kyriewen8 小时前
别再 console.log 了:5 个 Chrome DevTools 调试技巧,用过就回不去了
前端·javascript·面试
IT_陈寒10 小时前
Python搞不定字符串编码?这破玩意坑我两小时!
前端·人工智能·后端
DigitalOcean11 小时前
Laravel 开发者已在 DigitalOcean 上开通超过 10 万台服务器
前端·laravel
星始流年11 小时前
从 Tool 到 Skill——基于 LangChain 的服务端Skill实现
前端·langchain·agent
李惟11 小时前
开源本地通信库,纯客户端 RPC,像聊天一样通信
前端
YAwu1111 小时前
深入解析 React 炫彩鼠标跟随标题组件:从坐标定位到动画性能
前端·react.js
GuWenyue11 小时前
排序效率低?5分钟吃透快速排序,性能飙升至O(nlogn)
前端·javascript·面试
OpenTiny社区12 小时前
🎨 看完 GenUI SDK 源码我悟了!
前端·vue.js·github
叁两12 小时前
前端转型AI Agent该如何学习?(前置篇)
前端·人工智能·node.js
何时梦醒12 小时前
深入理解递归与快速排序 —— 从基础入门到手写实现
前端·javascript