解决 Git 推送/克隆时的 Permission denied (publickey) 错误

解决 Git 推送/克隆时的 Permission denied (publickey) 错误

_

在多设备开发时,经常会遇到在云服务器(Ubuntu)或本地机器(Arch Linux)上无法连接 GitHub 的情况。本文将介绍如何通过 SSH 密钥配置,彻底解决 GnuTLS recv errorPermission denied (publickey) 等连接问题。

1. 为什么会报错?

  • HTTPS 限制:在云服务器上使用 HTTPS 协议 (https://github.com/...) 容易受到网络抖动和 TLS 握手失败的影响。

  • 身份识别失败:SSH 协议使用的是非对称加密。如果你没有将当前设备的公钥 (Public Key) 添加到 GitHub,GitHub 就无法识别你的身份。

  • 设备独立性:SSH 密钥是绑定设备的。你在 Ubuntu 服务器上配好了,并不代表你的 Arch 电脑也能用,每台新设备都需要独立配置一次


2. 解决方案:配置 SSH 密钥(以 Arch/Ubuntu 为例)

第一步:生成新的 SSH 密钥

打开终端,执行以下命令:

ssh-keygen -t ed25519 -C "你的邮箱@example.com"
  • 提示保存路径:直接按回车(默认保存到 ~/.ssh/id_ed25519)。

  • 提示输入密码 (passphrase):建议直接按两次回车(留空),这样以后拉取代码不需要输入额外密码。

第二步:获取公钥内容

执行以下命令查看并复制生成的公钥:

cat ~/.ssh/id_ed25519.pub

你会看到一串以 ssh-ed25519 开头、以你邮箱结尾的长字符串。完整复制这一行。

第三步:将公钥添加到 GitHub

  1. 登录 GitHub,点击右上角头像 -> Settings

  2. 在左侧菜单点击 SSH and GPG keys

  3. 点击绿色按钮 New SSH key

  4. Title:起一个好记的名字(如 Arch-LaptopTencent-Cloud)。

  5. Key:粘贴刚才复制的公钥内容。

  6. 点击 Add SSH key 保存。

第四步:测试连接

在终端输入:

ssh -T git@github.com
  • 如果提示 Are you sure you want to continue connecting (yes/no/[fingerprint])?,输入 yes 并回车。

  • 看到 Hi username! You've successfully authenticated... 即表示配置成功。


3. 进阶:如何处理已有代码仓库?

如果你现有的仓库是用 HTTPS 克隆的,需要将其切换为 SSH 协议:

Bash

# 查看当前远程地址
git remote -v

# 修改为 SSH 地址 (将用户名和仓库名替换为你自己的)
git remote set-url origin git@github.com:用户名/仓库名.git

# 现在可以正常推送了
git push -u origin main

4. 常见问题排查 (Troubleshooting)

报错信息

原因

解决方法

GnuTLS recv error

HTTPS 握手受干扰

切换为上文所述的 SSH 协议

Permission denied (publickey)

GitHub 找不到对应的公钥

检查 cat 出来的公钥是否完整复制到了 GitHub 设置中

Host key verification failed

首次连接未确认身份

执行命令时手动输入 yes 而不是直接回车


5. 总结

核心逻辑:

  1. 在本地生成“钥匙对”(私钥自己留着,公钥给 GitHub)。

  2. 确保远程仓库地址是 git@github.com:... 格式。

  3. 每台新设备都要重复上述过程。


博主注: 推荐在 VS Code 中配合 Remote - SSH 插件使用,可以实现本地丝滑远程开发,减少频繁同步代码的烦恼。

Axios拦截器:请求与响应的处理 2024-02-18
CSS-居中技巧 2024-01-19

评论区