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

GitHub Actions SSH部署服务器失败后本地无法SSH登录问题

故障根因

你遇到的Action认证失败、Action执行后本地SSH无法连接两个问题,是同一个配置错误导致的:

  • 你在appleboy/scp-action中配置了source: "."、target: ".",该配置会把仓库内所有文件直接上传到SSH登录用户的家目录根路径。
  • SSH服务对用户家目录、.ssh目录、authorized_keys文件的权限有强制校验规则:
    • 用户家目录权限不能超过755,禁止组/其他用户持有写权限
    • ~/.ssh目录权限必须为700
    • ~/.ssh/authorized_keys文件权限必须为600
      任意一项权限不符合要求,sshd会直接拒绝所有公钥认证请求,不会校验密钥本身是否匹配。
  • scp上传文件时会携带源文件的权限属性,上传过程中修改了家目录下相关路径的权限,触发SSH的公钥认证拦截,所以Action执行到一半连接中断报握手错误,之后权限未恢复,本地也无法正常连接。
紧急恢复步骤

通过云服务商提供的网页VNC/服务器控制台登录实例,执行以下命令修复SSH权限:

# 修复家目录权限
chmod 755 ~
# 修复.ssh目录权限
chmod 700 ~/.ssh
# 修复授权公钥文件权限
chmod 600 ~/.ssh/authorized_keys
# 重启SSH服务生效
systemctl restart sshd

执行完成后本地SSH连接即可恢复正常。

工作流配置修复
  1. 提前在服务器创建独立的项目部署目录,不要直接往用户家目录传文件,比如创建/opt/your-project路径,给SSH登录用户分配该目录的读写权限。
  2. 替换工作流文件内容为以下配置,注意将路径替换为你自己的项目实际路径:
name: push-and-deploy-to-server

on:
  push:
    branches: [ main ]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      # 固定Action版本,不要用master浮动版本避免不兼容问题
      - uses: appleboy/scp-action@v0.1.10
        with:
          host: ${{ secrets.SSH_HOST }}
          port: 22
          username: ${{ secrets.SSH_USERNAME }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          source: "."
          # 替换为你自己的项目部署绝对路径
          target: "/opt/your-project"
          # 禁止自动删除目标路径下的无关文件
          rm: false
      - uses: appleboy/ssh-action@v0.1.10
        with:
          host: ${{ secrets.SSH_HOST }}
          port: 22
          username: ${{ secrets.SSH_USERNAME }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            # 先进入项目目录再执行后续命令
            cd /opt/your-project
            npm install --production
            # 首次部署不存在进程时自动启动
            pm2 restart index.js || pm2 start index.js
  1. 检查GitHub Secrets中存储的SSH_PRIVATE_KEY内容,确保完整包含私钥的首尾标记行(-----BEGIN OPENSSH PRIVATE KEY-----、-----END OPENSSH PRIVATE KEY-----),没有多余的空格、换行或者遗漏字符。
额外注意事项
  • 不要直接使用root用户做部署,建议创建独立的普通部署用户,仅分配项目目录的操作权限,避免误操作影响系统文件。
  • 所有Action依赖尽量指定固定版本号,不要使用@master这种浮动版本,避免上游更新带来不可预期的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:12:33