一、问题现象
在 Ubuntu 服务器执行:
git clone git@github.com:账户/project.git
报错:
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
二、问题原因
该错误表示:
👉 当前服务器没有可被 GitHub 识别的 SSH 公钥
GitHub 在使用 SSH 协议时,不使用账号密码,而是通过:
- 本地私钥(服务器)
- GitHub 上保存的公钥
进行认证。
只要这两者不匹配,就会出现:
Permission denied (publickey)
三、解决步骤
1. 检查是否已有 SSH key
ls -al ~/.ssh
如果存在:
id_ed25519
id_ed25519.pub
说明已经生成过密钥。
2. 如果没有,生成 SSH key
ssh-keygen -t ed25519 -C "your_email@example.com"
说明:
-C后面的邮箱只是备注(可随意写)- 一路回车即可
3. 启动 ssh-agent 并加载私钥
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
4. 获取公钥内容
cat ~/.ssh/id_ed25519.pub
复制输出的整行内容
5. 添加到 GitHub
登录 GitHub:
路径:
头像 → Settings → SSH and GPG keys → New SSH key
填写:
- Title:自定义(如 ubuntu-server)
- Key:粘贴刚才复制的公钥
点击 Add SSH key
6. 测试 SSH 连接
ssh -T git@github.com
成功输出:
Hi 用户名! You've successfully authenticated, but GitHub does not provide shell access.
7. 重新克隆仓库
git clone git@github.com:账户名/projects.git
四、常见坑
1. 公钥没有添加到 GitHub
最常见原因
2. 添加错账号
确保登录的是正确的 GitHub 账号
3. 没有加载私钥
ssh-add ~/.ssh/id_ed25519
4. 权限不正确
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
5. 使用了 sudo 导致环境不同
sudo git clone ...
问题:
- root 用户没有 SSH key
- 导致认证失败
正确做法:
git clone ...
五、HTTPS 与 SSH 对比
| 方式 | 优点 | 缺点 |
|---|---|---|
| HTTPS | 简单 | 每次可能需要认证 |
| SSH | 一次配置,长期使用 | 初次配置稍复杂 |
六、总结
该问题核心:
SSH 公钥未正确配置到 GitHub
解决流程:
生成密钥 → 添加公钥 → 测试连接 → 重新 clone