GitHub权限被拒?手把手教你解决Permission denied (publickey)问题!

2,030 阅读2分钟

当 GitHub 使用 SSH 进行身份验证时,如果无法找到有效的公钥,或者公钥未被添加到 GitHub 的账户中,就会出现 Permission denied (publickey) 报错。以下是详细的解决方法:


步骤 1:检查是否已有 SSH 密钥

首先检查系统是否已经生成了 SSH 密钥:

ls ~/.ssh
  • 如果看到类似 id_rsaid_ed25519 的文件,说明已经存在 SSH 密钥。
  • 如果没有这些文件,需要生成新的 SSH 密钥。

步骤 2:生成 SSH 密钥(如果没有)

如果没有现成的 SSH 密钥,可以通过以下命令生成:

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

⚠️ 将 "your_email@example.com" 替换为你在 GitHub 使用的邮箱地址。

按以下步骤操作:

  1. Enter 键,使用默认路径(~/.ssh/id_ed25519)。
  2. 设置密钥密码,或直接按 Enter 跳过(不建议)。

步骤 3:启动 SSH Agent 并加载密钥

接下来,确保 SSH Agent 正在运行,并将密钥加载进去:

  1. 启动 SSH Agent:

    eval "$(ssh-agent -s)"
    
  2. 添加生成的密钥到 SSH Agent:

    ssh-add ~/.ssh/id_ed25519
    

步骤 4:将公钥添加到 GitHub

将生成的 SSH 公钥添加到 GitHub。

  1. 查看公钥内容:

    cat ~/.ssh/id_ed25519.pub
    
  2. 复制命令输出的公钥内容。

  3. 登录 GitHub:


步骤 5:测试连接

完成以上配置后,测试是否成功连接 GitHub:

ssh -T git@github.com
  • 成功时会看到类似的提示:
    Hi <username>! You've successfully authenticated, but GitHub does not provide shell access.
    

步骤 6:检查远程仓库地址

确保你项目的 Git 远程仓库地址使用的是 SSH 格式:

git remote -v

输出应该类似如下:

origin  git@github.com:<username>/<repository>.git (fetch)
origin  git@github.com:<username>/<repository>.git (push)

如果显示的是 HTTPS 格式,可以切换为 SSH:

git remote set-url origin git@github.com:<username>/<repository>.git

常见问题解决

问题 1:SSH 密钥未加载

如果在测试连接时仍然报错,请确认密钥已经正确加载到 SSH Agent:

ssh-add ~/.ssh/id_ed25519

问题 2:多个 SSH 密钥冲突

如果有多个 SSH 密钥,可能需要为 GitHub 配置专用密钥。编辑或创建 ~/.ssh/config 文件,并添加以下内容:

Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519

保存后,重新测试连接。


按照以上步骤操作,你应该可以顺利解决 SSH 相关的问题!