在多设备开发时,经常会遇到在云服务器(Ubuntu)或本地机器(Arch Linux)上无法连接 GitHub 的情况。本文将介绍如何通过 SSH 密钥配置,彻底解决 GnuTLS recv error 或 Permission 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
登录 GitHub,点击右上角头像 -> Settings。
在左侧菜单点击 SSH and GPG keys。
点击绿色按钮 New SSH key。
Title:起一个好记的名字(如
Arch-Laptop或Tencent-Cloud)。Key:粘贴刚才复制的公钥内容。
点击 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)
5. 总结
核心逻辑:
在本地生成“钥匙对”(私钥自己留着,公钥给 GitHub)。
确保远程仓库地址是
git@github.com:...格式。每台新设备都要重复上述过程。
博主注: 推荐在 VS Code 中配合 Remote - SSH 插件使用,可以实现本地丝滑远程开发,减少频繁同步代码的烦恼。