你遇到的错误 Permission denied (publickey) 表明 Git 无法使用 SSH 密钥成功连接到 GitHub,通常是因为以下几个原因:

  1. SSH 密钥没有正确配置或加载
  2. GitHub 没有正确配置你的公钥
  3. 本地 SSH 客户端配置存在问题

下面是排查和解决问题的步骤:

1. 检查 SSH 密钥是否存在

首先,检查是否已经生成了 SSH 密钥,并且密钥文件是否存在。默认情况下,密钥文件应该在 ~/.ssh 目录下,例如:

  • WindowsC:\Users\你的用户名\.ssh\id_rsaC:\Users\你的用户名\.ssh\login(你使用的私钥文件名)
  • macOS/Linux~/.ssh/id_rsa

使用以下命令查看 ~/.ssh 目录中的文件:

ls ~/.ssh

如果你看到了类似 id_rsaid_rsa.pub 的文件,表示你已经生成了 SSH 密钥。

2. 检查 SSH 公钥是否已添加到 GitHub

确保你已经将公钥添加到 GitHub 中。你可以通过以下步骤来检查:

  1. 复制你的公钥:使用以下命令查看并复制公钥内容:

    cat ~/.ssh/id_rsa.pub  # 或者 cat ~/.ssh/login.pub
    
  2. 登录 GitHub:进入 GitHub 网站,登录到你的账户。

  3. 添加公钥到 GitHub

    • 进入 Settings(右上角头像点击下拉菜单,选择 Settings)。
    • 在左侧菜单中,选择 SSH and GPG keys
    • 点击 New SSH key,将你刚才复制的公钥粘贴到 Key 字段中,并给密钥命名(例如 My Laptop)。
    • 点击 Add SSH key

3. 检查 SSH 连接是否正常

确认你能够通过 SSH 与 GitHub 建立连接。使用以下命令测试 SSH 连接:

ssh -T git@github.com

如果一切配置正确,GitHub 会返回类似以下的消息:

Hi your-username! You've successfully authenticated, but GitHub does not provide shell access.

如果你收到类似 Permission denied 的错误,可能是 SSH 密钥未正确配置或者 GitHub 中未添加你的公钥。

4. 确保 SSH 密钥被加载到 ssh-agent 中

如果你的密钥已经存在并添加到 GitHub,但仍然无法连接,可能是你的 SSH 密钥没有加载到 ssh-agent 中。可以按以下步骤加载密钥:

  1. 启动 ssh-agent(如果尚未启动):

    eval "$(ssh-agent -s)"
    
  2. 添加你的私钥到 ssh-agent

    ssh-add ~/.ssh/id_rsa  # 或者 ~/.ssh/login
    
  3. 验证 SSH 密钥是否已加载

    ssh-add -l
    

    如果密钥已成功加载,输出将列出你的密钥指纹。

5. 配置 Git 使用正确的 SSH 密钥

如果你有多个 SSH 密钥,并且 Git 没有使用正确的密钥,你可以通过配置 ~/.ssh/config 来指定使用哪个密钥。例如,打开或创建一个 ~/.ssh/config 文件,然后添加如下内容:

Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa  # 或者你的私钥路径

6. 确保远程仓库 URL 是正确的

最后,确保你的 Git 配置中远程仓库的 URL 是 SSH 格式。如果你使用的是 HTTPS 格式(例如 https://github.com/username/repository.git),那么 Git 会要求你输入用户名和密码,而不是使用 SSH 密钥进行身份验证。

你可以查看当前远程仓库的 URL:

git remote -v

如果远程 URL 不是 SSH 格式(即不是 git@github.com:username/repository.git),你需要修改它。使用以下命令将远程仓库 URL 更改为 SSH 格式:

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

7. 重试推送

完成上述步骤后,重新尝试推送代码:

git push -u origin main  # 或者 master

总结

  • 确保你的 SSH 密钥已经生成 并且正确配置。
  • 公钥添加到 GitHub
  • 使用 ssh -T git@github.com 测试 SSH 连接。
  • 确保你的密钥已经加载到 ssh-agent 中。
  • 确保远程仓库 URL 使用的是 SSH 格式
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐