GitHub Actions部署到阿里云服务器时,SSH连接突然失败怎么办?

诸葛巧梅 阅读 35

之前用GitHub Actions部署到阿里云服务器一直正常,但今天突然报错Permission denied (publickey),我检查了SSH密钥文件和known_hosts都没问题,防火墙也放行了端口,这是怎么回事啊?

我的workflow里用的是这个步骤:

      - name: SSH deploy
        uses: appleboy/ssh-action@v0.1.5
        with:
          host: ${{ secrets.HOST }}
          username: root
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          port: 22
          script: cd /var/www && git pull

现在提示SSH session not established: Permissions 0644 for '/home/action/.ssh/id_rsa' are too open,之前没改过配置文件权限啊…

我来解答 赞 3 收藏
二维码
手机扫码查看
2 条解答
FSD-恩泽
这个错误其实挺常见的,SSH 客户端出于安全考虑,会拒绝加载权限太开放的私钥文件。虽然你在 workflow 里没改过什么,但可能是 action 的底层环境变了或者某个依赖更新了,导致现在校验更严格了。

关键是这句:Permissions 0644 for '/home/action/.ssh/id_rsa' are too open
意思是你的私钥文件权限是 0644,SSH 要求必须是 0600(也就是只有所有者可读写),否则就认为不安全,直接拒绝。

你可以试试这样改一下你的 workflow 步骤,在 ssh-action 前加一个步骤,手动设置密钥权限:

      - name: Fix SSH key permissions
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
echo "${{ secrets.KNOWN_HOSTS }}" > ~/.ssh/known_hosts
chmod 644 ~/.ssh/known_hosts
- name: SSH deploy
uses: appleboy/ssh-action@v0.1.5
with:
host: ${{ secrets.HOST }}
username: root
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: 22
script: cd /var/www && git pull


不过注意,如果你用了 key 参数传私钥,ssh-action 内部也会写文件,可能还是会遇到同样的权限问题。稳妥一点的做法是别用 key 字段,直接用系统生成的密钥文件路径。

或者升级一下 ssh-action 版本,新版本比如 v1.0.0+ 已经修复了很多权限问题。我之前也卡过这问题,升级完就好了。

另外提醒一下,secrets.SSH_PRIVATE_KEY 里不要带多余的空格或换行,最好用 | 这种方式写 multiline secret,不然也可能出问题。
点赞
2026-02-11 19:25
♫永景
♫永景 Lv1
我之前也遇到过,是GitHub Actions的SSH action版本升级后校验更严格了。把action版本从v0.1.5升到v1.0以上就行,新版本默认会修复私钥权限问题。改一下workflow:

- name: SSH deploy
uses: appleboy/ssh-action@v1.2.0
with:
host: ${{ secrets.HOST }}
username: root
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: 22
script: cd /var/www && git pull
点赞
2026-02-11 13:32