当 GitHub 使用 SSH 进行身份验证时,如果无法找到有效的公钥,或者公钥未被添加到 GitHub 的账户中,就会出现 Permission denied (publickey) 报错。以下是详细的解决方法:
步骤 1:检查是否已有 SSH 密钥
首先检查系统是否已经生成了 SSH 密钥:
ls ~/.ssh
- 如果看到类似
id_rsa或id_ed25519的文件,说明已经存在 SSH 密钥。 - 如果没有这些文件,需要生成新的 SSH 密钥。
步骤 2:生成 SSH 密钥(如果没有)
如果没有现成的 SSH 密钥,可以通过以下命令生成:
ssh-keygen -t ed25519 -C "your_email@example.com"
⚠️ 将
"your_email@example.com"替换为你在 GitHub 使用的邮箱地址。
按以下步骤操作:
- 按
Enter键,使用默认路径(~/.ssh/id_ed25519)。 - 设置密钥密码,或直接按
Enter跳过(不建议)。
步骤 3:启动 SSH Agent 并加载密钥
接下来,确保 SSH Agent 正在运行,并将密钥加载进去:
-
启动 SSH Agent:
eval "$(ssh-agent -s)" -
添加生成的密钥到 SSH Agent:
ssh-add ~/.ssh/id_ed25519
步骤 4:将公钥添加到 GitHub
将生成的 SSH 公钥添加到 GitHub。
-
查看公钥内容:
cat ~/.ssh/id_ed25519.pub -
复制命令输出的公钥内容。
-
登录 GitHub:
- 进入 SSH and GPG keys 页面。
- 点击 New SSH key,填写一个标题并粘贴公钥,最后保存。
步骤 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 相关的问题!