Laravel Forge单项目部署失败:Git公钥权限问题求助
Laravel Forge单个项目Git部署Permission Denied问题排查方案
问题概述
同服务器上的其他Laravel项目均可正常推送部署,但一个2021年最后更新的项目部署失败,报错:
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.Please make sure you have the correct access rights
and the repository exists.
已尝试的操作未解决:
- 尝试添加部署密钥提示已被使用;本地设备公钥已部署到服务器,维护其他项目正常
- SSH登录服务器确认
git config配置正确 - 重新设置远程仓库URL排除地址错误
- 确认组织内旧开发者账户无关联SSH密钥
- 在服务器通过ssh-agent生成新密钥并添加到个人账户
- 再次添加部署密钥仍提示已被使用
针对性排查方案
1. 为当前项目配置独立部署密钥
提示密钥已被使用,大概率是该密钥已关联到其他仓库,但未授权给当前项目。直接为该项目生成专属密钥:
- SSH登录服务器,切换到部署用户(如
sudo -u forge bash),生成新密钥:
一路回车跳过密码设置,避免部署时需要手动输入。ssh-keygen -t ed25519 -C "forge-deploy-你的项目名" - 复制新公钥内容:
cat ~/.ssh/id_ed25519_你的项目名.pub - 登录GitHub该仓库的Settings > Deploy keys,添加此公钥,勾选读取权限。
- 进入项目目录,配置git使用该密钥:
git config core.sshCommand "ssh -i ~/.ssh/id_ed25519_你的项目名 -F /dev/null"
2. 验证仓库级访问权限
由于项目长期未更新,可能组织权限政策变更:
- 确认你的GitHub账户(或部署用账户)拥有该仓库的读取权限,若为私有仓库,需联系组织管理员添加权限。
- 检查仓库是否被转移、重命名,或组织是否启用了SSH密钥IP白名单、强制使用GitHub App等限制策略。
3. 检查Laravel Forge项目的部署配置差异
同服务器项目正常不代表单个项目配置一致:
- 在Laravel Forge的项目页面,查看Deployment选项卡的部署用户是否与其他项目相同,部分项目可能配置了独立系统用户。
- 检查项目环境变量,确认是否存在
GIT_SSH_COMMAND等覆盖全局SSH设置的配置。
4. 测试服务器到GitHub的定向SSH连接
切换到部署用户后,指定密钥测试连接:
ssh -i ~/.ssh/你的项目专属密钥 -T git@github.com
正常输出应为Hi 用户名/仓库名! You've successfully authenticated, but GitHub does not provide shell access.,若仍报错,说明密钥与仓库权限不匹配。
5. 切换远程仓库协议(SSH/HTTPS)
若SSH方式始终有问题,可临时切换为HTTPS协议,使用个人访问令牌验证:
- 生成GitHub个人访问令牌(需仓库读取权限)。
- 更新项目远程URL:
git remote set-url origin https://<你的令牌>@github.com/用户名/仓库名.git
内容的提问来源于stack exchange,提问作者erinam99
相关产品推荐
相关产品推荐

