配置带真实IP的GitHub CI/CD流水线遇SSH连接超时求助
解决GitHub Actions SSH连接超时问题
一、基础网络连通性排查
- 验证公网端口可达性:在本地执行
telnet 119.xx.xx.xx 1322或ssh -p 1322 username@119.xx.xx.xx,确认该端口能否从公网访问。如果本地也无法连接,问题不在GitHub Actions,需排查服务器端网络配置。 - 检查防火墙/安全组规则:确认服务器所在云服务商的安全组已开放1322端口的入站规则,允许公网IP(或GitHub Actions的IP段)访问;同时检查服务器本地防火墙(如Windows Defender防火墙)是否放行1322端口的SSH流量。
二、适配GitHub Actions Runner环境
- 切换至Linux Runner:Windows环境下的
scp/ssh工具存在兼容性问题,建议将runs-on改为ubuntu-latest,同时优化密钥配置逻辑,避免权限或环境差异导致的问题。修改后的配置示例:
jobs: deploy: runs-on: ubuntu-latest needs: build_publish_api steps: - name: Checkout repository uses: actions/checkout@v3 - name: Download API artifacts uses: actions/download-artifact@v4 with: name: api-artifacts - name: Deploy API to server run: | mkdir -p ~/.ssh echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key echo -e "Host 119.xx.xx.xx\n Port 1322\n IdentityFile ~/.ssh/deploy_key\n StrictHostKeyChecking no" >> ~/.ssh/config scp -r ./build/API/ username@119.xx.xx.xx:/C/inetpub/wwwroot/BRPPIMS/API
- 禁用主机密钥校验:通过
StrictHostKeyChecking no避免首次连接时的交互式确认,防止连接因等待人工输入中断。
三、端口转发配置验证
- 确认转发规则有效性:若使用端口映射(如路由器或云服务端口转发),检查外部端口1322是否正确映射到服务器内部的SSH端口(默认22,若修改过则对应自定义端口),且转发协议为TCP,目标IP为服务器内网IP。
- 检查端口监听状态:在服务器上执行
netstat -ano | findstr :1322(Windows)或ss -tulpn | grep :1322(Linux),确认1322端口(或转发的内部端口)被SSH服务正常监听。
四、SSH密钥配置验证
- 检查私钥完整性:确认GitHub Secrets中
SSH_PRIVATE_KEY为完整的PEM格式(开头-----BEGIN RSA PRIVATE KEY-----,结尾-----END RSA PRIVATE KEY-----),无换行丢失或格式错误。 - 确认公钥已配置:将对应公钥添加至服务器的
C:\Users\username\.ssh\authorized_keys(Windows)或~/.ssh/authorized_keys(Linux)文件,Windows需确保该文件无过度继承权限,Linux需设置authorized_keys权限为600、.ssh目录权限为700。
内容的提问来源于stack exchange,提问作者SYED NAWAZ PRINCE
相关产品推荐
相关产品推荐

