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

Github Actions使用scp-action报错Process exited with status 1求助

问题:Github Actions中appleboy/scp-action执行失败(Process exited with status 1)

我配置了以下用于部署的Github Actions工作流:

prepare-release-on-servers:
    name: "${{ matrix.server.name }}: Prepare release"
    runs-on: ubuntu-latest
    needs: create-deployment-artifacts
    strategy:
      matrix:
        server: ${{ fromJson(needs.create-deployment-artifacts.outputs.deployment-matrix) }}
    steps:
    - uses: actions/download-artifact@v2
      with:
        name: app-build

    - name: Upload
      uses: appleboy/scp-action@master
      with:
        host: ${{ matrix.server.ip }}
        username: ${{ matrix.server.username }}
        key: ${{ secrets.SSH_KEY }}
        port: ${{ matrix.server.port }}
        source: ${{ github.sha }}.tar.gz
        target: ${{ matrix.server.path }}/artifacts

执行时出现如下错误:

$ tar all files into /tmp/1572874449/LrdzhrdahF.tar
$ tar -cf /tmp/1572874449/LrdzhrdahF.tar 5582b2e863bad1ad97bf662193b090b7e1dbaf85.tar.gz
scp file to server.
2022/09/30 12:15:55 error copy file to dest: XXX.XXX.XXX.XXX, error message: Process exited with status 1
drone-scp error:  error copy file to dest: XXX.XXX.XXX.XXX, error message: Process exited with status 1

本地使用相同SSH密钥可正常连接服务器,已开启调试模式但未获取到明确原因,求排查思路和解决办法。


排查思路与解决办法
  • 检查目标路径权限与存在性
    确认服务器上的${{ matrix.server.path }}/artifacts目录是否存在,且部署用户(${{ matrix.server.username }})拥有读写权限。可在工作流中添加前置验证步骤:

    - name: Check target path
      uses: appleboy/ssh-action@master
      with:
        host: ${{ matrix.server.ip }}
        username: ${{ matrix.server.username }}
        key: ${{ secrets.SSH_KEY }}
        port: ${{ matrix.server.port }}
        script: |
          ls -ld ${{ matrix.server.path }}/artifacts || mkdir -p ${{ matrix.server.path }}/artifacts
          chown -R ${{ matrix.server.username }} ${{ matrix.server.path }}/artifacts
    
  • 验证下载的工件文件是否存在
    在scp步骤前添加文件检查,确认${{ github.sha }}.tar.gz已成功下载到工作目录:

    - name: Verify artifact exists
      run: |
        ls -la ${{ github.sha }}.tar.gz
    

    如果文件不存在,需检查上游create-deployment-artifacts步骤中上传的artifact名称是否为app-build,且内部包含该tar.gz文件。

  • 调整scp-action的压缩行为
    从日志看,scp-action会自动将source文件重新打包,可能引发冲突。尝试禁用自动压缩或调整打包参数:

    - name: Upload
      uses: appleboy/scp-action@master
      with:
        host: ${{ matrix.server.ip }}
        username: ${{ matrix.server.username }}
        key: ${{ secrets.SSH_KEY }}
        port: ${{ matrix.server.port }}
        source: ${{ github.sha }}.tar.gz
        target: ${{ matrix.server.path }}/artifacts
        compress: false # 禁用自动压缩,避免重复打包
    
  • 检查SSH密钥格式
    确认Github Secrets中存储的SSH_KEY是完整的私钥,包含开头的-----BEGIN RSA PRIVATE KEY-----和结尾的-----END RSA PRIVATE KEY-----,无多余换行或空格。

  • 查看服务器端SSH日志
    登录服务器,查看SSH服务日志(通常在/var/log/auth.log或/var/log/secure),日志会记录连接失败的具体原因,比如密钥认证失败、用户权限限制等。

  • 切换到稳定版本的scp-action
    当前使用的master分支可能存在兼容性问题,尝试指定稳定版本,例如v0.1.4:

    uses: appleboy/scp-action@v0.1.4
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:30:47