Github Actions使用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

