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

使用appleboy/ssh-action@v1.0.3部署至IPv6 Hetzner服务器遇报错

问题分析与解决

核心问题

你使用的appleboy/ssh-action@v1.0.3版本不支持protocol参数——这个参数是该Action后续版本才新增的功能,因此GitHub Actions会提示该参数不合法。

解决方案

方案1:升级ssh-action版本

将Action版本替换为支持protocol参数的稳定版(比如v1.1.0),同时修正脚本里的语法错误(docker stop/rm命令缺失逻辑或符号):

- uses: appleboy/ssh-action@v1.1.0
  with:
    host: ${{ secrets.HETZNER_HOST }}
    username: ${{ secrets.HETZNER_USERNAME }}
    key: ${{ secrets.HETZNER_SSH_KEY }}
    port: 22
    protocol: tcp6
    debug: true
    script: |
      sudo docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_TOKEN }}
      sudo docker pull ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_IMAGE }}:latest
      sudo docker stop main || true
      sudo docker rm main || true
      sudo docker run -d --name main -p 8080:3000 ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_IMAGE }}:latest

方案2:使用原生SSH命令替代(无需第三方Action)

直接用GitHub Actions的run步骤调用系统原生SSH命令,原生SSH通过-6参数即可强制使用IPv6连接,无需依赖第三方Action:

- name: Deploy via SSH over IPv6
  run: |
    ssh -6 -i <(echo "${{ secrets.HETZNER_SSH_KEY }}") -o StrictHostKeyChecking=no ${{ secrets.HETZNER_USERNAME }}@${{ secrets.HETZNER_HOST }} << 'EOF'
      sudo docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_TOKEN }}
      sudo docker pull ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_IMAGE }}:latest
      sudo docker stop main || true
      sudo docker rm main || true
      sudo docker run -d --name main -p 8080:3000 ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_IMAGE }}:latest
    EOF

注意:若服务器IPv6地址为纯数字格式(无域名),需用方括号包裹,例如user@[2a01:4f8:123:456::1]

额外注意点

  • 脚本中docker stop main || true的|| true是必须的:如果容器未运行,docker stop会返回非0退出码,加上该逻辑可避免整个脚本执行中断。
  • 确保GitHub Runner环境支持IPv6连接(GitHub托管的Runner默认支持)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:52:44