Laravel Deployer部署遇git@github.com公钥权限拒绝问题求助
解决Laravel Deployer部署时
deploy:update_code任务Git公钥权限拒绝问题 问题原因
当你通过vendor/bin/dep deploy -o become=root执行部署时,Deployer会切换到root用户执行deploy:update_code任务,但root用户的SSH环境(密钥路径、配置文件、权限)和你手动登录时使用的deployer用户不一致,导致无法正确加载连接GitHub所需的SSH密钥,从而触发Permission denied (publickey)错误。
解决方案
方案1:让root用户复用deployer的SSH配置与密钥
- 切换到root用户:
sudo su - root - 确保root用户有
.ssh目录并设置正确权限:mkdir -p /root/.ssh && chmod 700 /root/.ssh - 复制deployer用户的SSH配置到root目录:
cp /home/deployer/.ssh/config /root/.ssh/ - 复制deployer的GitHub密钥到root目录并修正权限:
cp /home/deployer/.ssh/id_rsa /root/.ssh/ && chmod 600 /root/.ssh/id_rsa cp /home/deployer/.ssh/id_rsa.pub /root/.ssh/ && chmod 644 /root/.ssh/id_rsa.pub - 验证root用户能否连接GitHub:
返回ssh -T git@github.comHi [你的用户名]! You've successfully authenticated...则配置有效。
方案2:让deploy:update_code任务以deployer用户执行(更推荐)
Git克隆操作不需要root权限,可单独指定该任务用deployer用户执行,避免切换root带来的SSH环境问题:
在你的deploy.php配置文件中,覆盖deploy:update_code任务:
task('deploy:update_code', function () { run('git clone --mirror {{repository}} {{deploy_path}}/.git', ['user' => 'deployer']); })->override();
后续需要root权限的操作(如目录权限调整、服务重启)可单独通过sudo执行,或在对应任务中设置sudo选项。
方案3:启用SSH代理转发(无需在VPS存储GitHub密钥)
通过SSH代理转发,让VPS使用WSL本地的SSH密钥连接GitHub,无需在VPS上配置额外密钥:
- 在WSL的
~/.ssh/config中添加针对VPS的配置,开启代理转发:Host your-vps-ip User deployer IdentityFile ~/.ssh/id_rsa_deployer ForwardAgent yes - 在Deployer的
deploy.php中启用SSH代理转发:set('ssh_options', [ 'ForwardAgent' => true, ]); - 验证代理转发生效:在VPS上执行
ssh -T git@github.com,能成功认证则配置有效。
关键注意事项
- SSH密钥文件权限必须严格为
600,.ssh目录权限为700,否则SSH会拒绝加载密钥。 - 避免用root用户执行Git操作,不仅会引发权限问题,还会导致仓库文件归root所有,后续应用运行可能出现权限异常。
内容的提问来源于stack exchange,提问作者michal
相关产品推荐
相关产品推荐

