Github Action部署至Lightsail遇dial tcp i/o timeout故障求助
Github Action SSH部署到Amazon Lightsail出现I/O超时问题(已排除脚本、密钥、本地连接问题)
问题详情
我配置了通过SSH将代码部署至Amazon Lightsail服务器的Github Action,此前运行正常,但突然开始出现I/O错误并失败,连续24小时多次尝试均失败。注释脚本中所有内容后仍报错,确定问题不在脚本中,是无法连接到服务器,未执行到脚本环节。
输出信息
Run appleboy/ssh-action@master /usr/bin/docker run --name ea425b117d14f49c9448e1ae86bb8e0dfd290d_f25ed1 --label ea425b --workdir /github/workspace --rm -e "INPUT_HOST" -e "INPUT_USERNAME" -e "INPUT_KEY" -e "INPUT_PORT" -e "INPUT_SCRIPT" -e "INPUT_PASSPHRASE" -e "INPUT_PASSWORD" -e "INPUT_SYNC" -e "INPUT_USE_INSECURE_CIPHER" -e "INPUT_CIPHER" -e "INPUT_TIMEOUT" -e "INPUT_COMMAND_TIMEOUT" -e "INPUT_KEY_PATH" -e "INPUT_FINGERPRINT" -e "INPUT_PROXY_HOST" -e "INPUT_PROXY_PORT" -e "INPUT_PROXY_USERNAME" -e "INPUT_PROXY_PASSWORD" -e "INPUT_PROXY_PASSPHRASE" -e "INPUT_PROXY_TIMEOUT" -e "INPUT_PROXY_KEY" -e "INPUT_PROXY_KEY_PATH" -e "INPUT_PROXY_FINGERPRINT" -e "INPUT_PROXY_CIPHER" -e "INPUT_PROXY_USE_INSECURE_CIPHER" -e "INPUT_SCRIPT_STOP" -e "INPUT_ENVS" -e "INPUT_DEBUG" -e "HOME" -e "GITHUB_JOB" -e "GITHUB_REF" -e "GITHUB_SHA" -e "GITHUB_REPOSITORY" -e "GITHUB_REPOSITORY_OWNER" -e "GITHUB_REPOSITORY_OWNER_ID" -e "GITHUB_RUN_ID" -e "GITHUB_RUN_NUMBER" -e "GITHUB_RETENTION_DAYS" -e "GITHUB_RUN_ATTEMPT" -e "GITHUB_REPOSITORY_ID" -e "GITHUB_ACTOR_ID" -e "GITHUB_ACTOR" -e "GITHUB_TRIGGERING_ACTOR" -e "GITHUB_WORKFLOW" -e "GITHUB_HEAD_REF" -e "GITHUB_BASE_REF" -e "GITHUB_EVENT_NAME" -e "GITHUB_SERVER_URL" -e "GITHUB_API_URL" -e "GITHUB_GRAPHQL_URL" -e "GITHUB_REF_NAME" -e "GITHUB_REF_PROTECTED" -e "GITHUB_REF_TYPE" -e "GITHUB_WORKFLOW_REF" -e "GITHUB_WORKFLOW_SHA" -e "GITHUB_WORKSPACE" -e "GITHUB_ACTION" -e "GITHUB_EVENT_PATH" -e "GITHUB_ACTION_REPOSITORY" -e "GITHUB_ACTION_REF" -e "GITHUB_PATH" -e "GITHUB_ENV" -e "GITHUB_STEP_SUMMARY" -e "GITHUB_STATE" -e "GITHUB_OUTPUT" -e "RUNNER_OS" -e "RUNNER_ARCH" -e "RUNNER_NAME" -e "RUNNER_TOOL_CACHE" -e "RUNNER_TEMP" -e "RUNNER_WORKSPACE" -e "ACTIONS_RUNTIME_URL" -e "ACTIONS_RUNTIME_TOKEN" -e "ACTIONS_CACHE_URL" -e GITHUB_ACTIONS=true -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" -v "/home/runner/work/_temp/_runner_file_commands":"/github/file_commands" -v "/home/runner/work/carboncalc/carboncalc":"/github/workspace" ea425b:117d14f49c9448e1ae86bb8e0dfd290d ======CMD====== # cd /opt/bitnami/drupal # git pull origin main # composer -n install # if [ $? -ne 0 ]; then # exit 1 # fi # drush updb # drush cr ======END====== 372023/01/18 11:24:51 dial tcp 104.21.26.173:22: i/o timeout
已尝试操作
- 使用
ubuntu-latest和ubuntu-20.04runner,结果一致 - 本地可正常SSH连接服务器,secrets中的密钥未变更
- 服务器磁盘空间充足
- 排除了SSH密钥错误、端口关闭、IP变更等常见问题
需求
- 如何在appleboy/ssh-action中增加超时时间
- 其他可能的排查方向和解决方案
解决方法
1. 增加SSH连接超时时间
在appleboy/ssh-action的配置中,通过timeout参数设置连接超时(单位:秒),默认超时较短,可尝试延长至60秒或更久:
- name: Deploy to Lightsail uses: appleboy/ssh-action@master with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USER }} key: ${{ secrets.SSH_KEY }} timeout: 60 # 设置连接超时时间为60秒 script: | # 你的部署脚本
同时可设置command_timeout参数,控制单条命令的执行超时时间:
command_timeout: 120 # 命令执行超时120秒
2. 排查Github Actions Runner的网络拦截
由于本地能连接但Runner无法连接,大概率是Github的Runner IP段被Lightsail的安全组(Security Groups)拦截:
- 登录Lightsail控制台,检查安全组的入站规则,临时开放所有IP(0.0.0.0/0)的22端口测试
- 如果测试通过,说明是IP拦截问题,需要将Github Actions的官方IP段加入白名单(Github会定期更新IP范围)
3. 验证DNS解析正确性
错误中的IP 104.21.26.173可能是域名解析后的地址,确认该IP是否为Lightsail服务器的正确公网IP。可在Runner中添加步骤验证解析:
- name: Resolve host IP run: nslookup ${{ secrets.SSH_HOST }}
4. 开启Debug模式获取详细日志
开启ssh-action的debug模式,获取连接过程的详细日志,帮助定位问题:
- name: Deploy with debug uses: appleboy/ssh-action@master with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USER }} key: ${{ secrets.SSH_KEY }} debug: true # 开启debug模式 script: | # 脚本内容
5. 切换到稳定版本的SSH Action
当前使用master分支可能存在兼容性问题,尝试指定稳定版本:
uses: appleboy/ssh-action@v0.1.7
内容的提问来源于stack exchange,提问作者naomi
相关产品推荐
相关产品推荐

