You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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配置与密钥

  1. 切换到root用户:
    sudo su - root
    
  2. 确保root用户有.ssh目录并设置正确权限:
    mkdir -p /root/.ssh && chmod 700 /root/.ssh
    
  3. 复制deployer用户的SSH配置到root目录:
    cp /home/deployer/.ssh/config /root/.ssh/
    
  4. 复制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
    
  5. 验证root用户能否连接GitHub:
    ssh -T git@github.com
    
    返回Hi [你的用户名]! 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上配置额外密钥:

  1. 在WSL的~/.ssh/config中添加针对VPS的配置,开启代理转发:
    Host your-vps-ip
        User deployer
        IdentityFile ~/.ssh/id_rsa_deployer
        ForwardAgent yes
    
  2. 在Deployer的deploy.php中启用SSH代理转发:
    set('ssh_options', [
        'ForwardAgent' => true,
    ]);
    
  3. 验证代理转发生效:在VPS上执行ssh -T git@github.com,能成功认证则配置有效。

关键注意事项

  • SSH密钥文件权限必须严格为600,.ssh目录权限为700,否则SSH会拒绝加载密钥。
  • 避免用root用户执行Git操作,不仅会引发权限问题,还会导致仓库文件归root所有,后续应用运行可能出现权限异常。

内容的提问来源于stack exchange,提问作者michal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:20:10