Permission denied"如何解决?详解GitHub SSH密钥认证流程
2025年4月16日 14:57
"当你满心欢喜运行
deploy.sh
部署Vue项目到GitHub Pages,却突然看到:git@github.com: Permission denied (publickey).
本文将从零教你配置SSH密钥,彻底解决此类权限问题。"
-
核心流程
-
检查本地是否存在 SSH 密钥:
- 打开你的终端,并执行以下命令(通常在你的用户主目录下):
ls -al ~/.ssh # 查看是否存在id_rsa(私钥)和id_rsa.pub(公钥)这样的文件。 #`id_rsa`:**私钥文件**(Private Key),必须严格保密,相当于你的"密码"。 #`id_rsa.pub`:**公钥文件**(Public Key),可公开,用于配对验证,相当于"锁"。
-
如果找不到
id_rsa
和id_rsa.pub
文件: 说明你还没有生成 SSH 密钥对,需要按照下面的步骤 2 生成。 - 如果找到了这些文件: 请跳到步骤 3,将你的公钥添加到 GitHub。
-
生成新的SSH密钥对 (如果需要):
- 生成命令(含注释):
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # -t 指定密钥类型,-b 指定密钥长度,-C 添加注释(建议用你的 GitHub 账户关联的邮箱地址)
- 交互提示中可直接回车使用默认路径(
~/.ssh/id_rsa
),也可以自定义路径。 - 可选设置密钥密码(增加安全性,但自动化部署时可能需额外配置)。如果设置了密码,请记住这个密码。
-
将SSH 公钥添加到你的 GitHub 账户:
-
复制公钥内容: 使用以下命令将你的公钥复制到剪贴板(如果你的公钥文件名不是
id_rsa.pub
,请替换成你的文件名):-
macOS:
pbcopy < ~/.ssh/id_rsa.pub
-
Linux (需要
xclip
):
如果xclip -sel clip < ~/.ssh/id_rsa.pub
xclip
没有安装,可以使用cat
命令并手动复制:cat ~/.ssh/id_rsa.pub
-
Windows (可以使用
clip
命令):
或者使用文本编辑器打开clip < ~/.ssh/id_rsa.pub
~/.ssh/id_rsa.pub
文件并手动复制内容。
-
macOS:
-
添加到 GitHub:
* 登录你的 GitHub 账户。 * 点击右上角的头像,然后选择 "Settings"。 * 在左侧边栏中,点击 "SSH and GPG keys"。 * 点击 "New SSH key" 或 "Add SSH key"。 * 在 "Title" 字段中,为你的密钥添加一个描述性的名称(例如,"My Laptop")。 * 在 "Key" 字段中,粘贴你刚刚复制的公钥。 * 点击 "Add SSH key"。如果提示,输入你的 GitHub 密码进行确认。
-
复制公钥内容: 使用以下命令将你的公钥复制到剪贴板(如果你的公钥文件名不是
-
测试 SSH 连接:
- 验证命令:
ssh -T git@github.com # 成功会显示"Hi username! You've successfully authenticated, but GitHub does not provide shell access."
- 如果仍然出现 "Permission denied (publickey)" 错误,请仔细检查以下几点:
- 你是否将正确的公钥(以
.pub
结尾的文件内容)添加到了 GitHub? - 你的本地 SSH 密钥对是否存在,并且私钥 (
id_rsa
或你自定义的文件名) 位于~/.ssh
目录下? - 如果你的私钥有密码,SSH agent 是否正在运行并且已经添加了你的私钥?你可以尝试添加私钥到 SSH agent(如果提示
agent refused operation
,需先启动ssh-agent):eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa # 如果你的私钥文件名不同,请替换
- 你是否将正确的公钥(以
-
确保你的 Git 远程仓库 URL 使用 SSH:
检查你的项目
.git/config
文件中的remote "origin" url
是否是以git@github.com:
开头。如果不是,你需要将其更改为 SSH URL。查看远程仓库 URL:
git remote -v
如果输出的 URL 是
https://github.com/<USERNAME>/<REPO>.git
这种 HTTPS 形式,你需要将其更改为 SSH 形式:git remote set-url origin git@github.com:<USERNAME>/<REPO>.git
再次运行
git remote -v
确认 URL 已经更改。
-
-
密钥安全建议:
- 切勿将
id_rsa
文件上传到Git仓库或公开位置。 - 定期轮换密钥(GitHub支持多密钥共存,删除旧密钥即可)。
- 切勿将