使用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
相关产品推荐
相关产品推荐

