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

Laravel Forge:如何为单个Github仓库添加多个部署密钥

问题根因

你碰到的Key is already in use报错和staging部署权限问题,核心原因是Laravel Forge单台服务器默认会全局复用forge用户的同一套SSH密钥访问Git仓库。你在Forge面板看到的两个站点的Deploy Key存在显示缓存,实际staging站点拉代码时调用的SSH公钥,和你之前给生产站点添加的Deploy Key完全一致。Github规则不允许同一个公钥重复绑定到同一个仓库的Deploy Key列表,所以你加不上第二个密钥,staging站点拉代码时自然会报仓库无权限的错误。

方案1:修复双Deploy Key配置(适配服务器自主拉取代码的模式)

按以下步骤操作即可正常添加第二个独立Deploy Key:

  • 登录Forge服务器,不要用面板自动生成的staging站点密钥,手动生成专属ED25519密钥对,执行命令:
    ssh-keygen -t ed25519 -C "staging-site-deploy" -f /home/forge/.ssh/staging_id_ed25519
    # 执行后直接回车两次,不要设置密钥密码
    
  • 执行cat /home/forge/.ssh/staging_id_ed25519.pub复制输出的公钥内容,到Github仓库Deploy Key页面添加,此时不会再报密钥重复错误。
  • 编辑服务器上的SSH配置文件/home/forge/.ssh/config,添加如下配置,给staging站点指定独立密钥:
    Host github-staging
        HostName github.com
        User git
        IdentityFile /home/forge/.ssh/staging_id_ed25519
        IdentitiesOnly yes
    
  • 进入staging站点的根目录,修改.git/config里的remote地址,把原有git@github.com:你的账号/仓库名.git替换为git@github-staging:你的账号/仓库名.git,保存后手动在staging目录执行一次git pull验证权限正常即可。
方案2:最优Github Actions配置(推荐)

这个方案不需要折腾服务器上的多密钥适配,维护成本更低,还能把CI校验流程和部署打通,避免问题代码上线,是目前这类分支对应环境部署场景的通用最优解:

  1. 先把两个站点在Forge面板里的「快速部署」功能关掉,避免重复触发。
  2. 在仓库的.github/workflows目录下新建deploy.yml,写入以下配置,把两个环境的部署逻辑合并维护,不需要单独写两个工作流文件:
name: Forge Auto Deploy

on:
  push:
    branches: [ main, develop ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      # 按需添加CI校验步骤:依赖安装、单元测试、代码规范检查、前端资源构建等,校验不通过会直接终止部署
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.2' # 替换为项目实际使用的PHP版本
      - name: Install composer dependencies
        run: composer install --no-dev --prefer-dist --no-interaction
      - name: Build frontend
        run: |
          npm ci
          npm run build

      # 按触发分支匹配对应环境的部署钩子
      - name: Deploy to production
        if: github.ref == 'refs/heads/main'
        run: curl -s ${{ secrets.FORGE_DEPLOYMENT_HOOK_PRODUCTION }}
      
      - name: Deploy to staging
        if: github.ref == 'refs/heads/develop'
        run: curl -s ${{ secrets.FORGE_DEPLOYMENT_HOOK_STAGING }}
  1. 彻底解决服务器拉代码权限问题:放弃SSH协议拉取,改用HTTPS+PAT鉴权,不需要配置任何Deploy Key:
    • 生成一个仅勾选repo:read权限的Github Personal Access Token,不要开通多余权限
    • 进入Forge站点管理页面,把两个站点的Git仓库地址改成https://你的PAT@github.com/你的账号/仓库名.git,分支分别对应main和develop即可,同一个PAT可以给两个站点复用,完全不会有密钥冲突问题。

注意:PAT只授予仓库读取的最小权限,定期轮换,避免泄露后产生安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 02:24:21