GitLab迁移GitHub后CI/CD SSH部署超时问题求助
解决GitHub Actions SSH部署超时问题
以下是针对你遇到的GitHub Actions SSH部署超时问题的几种解决方案,按优先级排序:
1. 手动模拟GitLab CI的SSH配置逻辑(最可靠)
直接复用你在GitLab中验证过的SSH配置步骤,避免依赖第三方action的封装问题:
name: Node.js CD on: push: branches: [ "main" ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Deploy to remote server env: HOST: ${{ secrets.HOST }} USERNAME: ${{ secrets.USERNAME }} PRIVATE_KEY: ${{ secrets.PRIVATE_KEY }} PORT: ${{ secrets.PORT }} COMMAND: ${{ secrets.COMMAND }} run: | # 启动ssh-agent并添加密钥 eval $(ssh-agent -s) echo "$PRIVATE_KEY" | tr -d '\r' | ssh-add - # 配置ssh目录权限 mkdir -p ~/.ssh chmod 700 ~/.ssh # 添加服务器主机密钥到known_hosts ssh-keyscan -p $PORT -t rsa $HOST >> ~/.ssh/known_hosts chmod 644 ~/.ssh/known_hosts # 执行部署命令 ssh -p $PORT $USERNAME@$HOST "$COMMAND"
这种方式和你原来GitLab CI的逻辑完全一致,能排除第三方action的潜在问题,同时方便你在步骤中添加调试命令(比如cat ~/.ssh/known_hosts)排查细节。
2. 修复appleboy/ssh-action的配置问题
如果你坚持使用appleboy/ssh-action,需要补充以下关键配置:
steps: - name: executing remote ssh commands uses: appleboy/ssh-action@v0.1.10 with: host: ${{ secrets.HOST }} username: ${{ secrets.USERNAME }} key: ${{ replace(secrets.PRIVATE_KEY, '\r', '') }} # 处理Windows换行符 port: ${{ secrets.PORT }} script: ${{ secrets.COMMAND }} host_key: ${{ secrets.HOST_KEY }} # 添加服务器主机密钥 timeout: "60s" # 延长超时时间
- 主机密钥配置:在本地执行
ssh-keyscan -p <你的端口> <你的主机>,将输出内容存入GitHub Secrets的HOST_KEY中; - 密钥格式处理:用
replace函数去除密钥中的回车符,避免格式错误; - 延长超时:默认超时可能不足以完成连接,调整为60秒或更长。
3. 排查服务器端问题
- 查看服务器的SSH日志(通常在
/var/log/auth.log或/var/log/secure),确认是否有GitHub Actions runner的连接请求记录,判断是连接失败还是认证失败; - 检查服务器防火墙/安全组规则,确保允许GitHub Actions的IP段访问SSH端口(可临时开放所有IP测试,确认后再限制范围);
- 验证服务器
~/.ssh/authorized_keys文件的权限:文件权限必须为600,所在目录权限为700,否则SSH会拒绝认证。
内容的提问来源于stack exchange,提问作者Kenyuki
相关产品推荐
相关产品推荐

