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

GitLab Runner出现ssh: Operation timeout错误的原因排查

问题分析与排查步骤

先指出你CI配置里的明显错误:

  • 路径拼写错误:before_script里的chmod 700 ~/.shh是笔误,正确路径应为~/.ssh,这个错误会导致.ssh目录权限配置失效,虽不一定直接引发超时,但会影响SSH的正常配置加载。

针对ssh: Operation timeout错误,从以下方向逐一排查:

1. 私钥处理环节验证

先确认私钥是否正确加载,排除密钥层面的问题:

  • 在before_script中添加ssh-add -l命令,查看私钥是否成功加入ssh-agent。若输出为空,说明私钥加载失败。
  • 检查GitLab CI变量$KEY:确保变量包含完整的SSH私钥内容(包含-----BEGIN RSA PRIVATE KEY-----和-----END RSA PRIVATE KEY-----首尾行),且变量类型设为「Protected」或「Masked」,避免格式被转义。
  • 确认目标服务器的~/.ssh/authorized_keys文件已添加该私钥对应的公钥,同时保证authorized_keys权限为600、.ssh目录权限为700。

2. 网络与防火墙排查

超时最常见的原因是网络连通性问题:

  • 测试GitLab Runner所在机器到目标服务器的22端口连通性:在Runner机器上执行telnet $SSH_HOST 22或nc -zv $SSH_HOST 22,确认端口是否可访问。
  • 检查目标服务器的防火墙/安全组:是否放行Runner出口IP的22端口入站请求。
  • 核对$SSH_HOST变量值:确保是正确的IP地址或域名,无拼写错误。

3. SSH命令调试

添加 verbose 参数获取详细连接日志:
将script中的SSH命令修改为:

ssh -v -o StrictHostKeyChecking=no $SSH_USER@$SSH_HOST "echo Hello"

-v参数会输出完整的连接过程日志,可定位是DNS解析失败、密钥验证环节出错还是连接被拦截。

4. 变量配置检查

确认$SSH_USER和$SSH_HOST已在GitLab项目的「Settings > CI/CD > Variables」中正确配置,无空值或拼写错误。

修正后的CI配置示例

stages:
  - deploy
deploy:
  stage: deploy
  before_script:
    - eval $(ssh-agent -s)
    - echo "$KEY" | tr -d '\r' | ssh-add -
    - mkdir -p ~/.ssh && chmod 700 ~/.ssh  # 修正路径拼写错误
    - ssh-add -l  # 新增:验证私钥加载状态
  script:
    - ssh -v -o StrictHostKeyChecking=no $SSH_USER@$SSH_HOST "echo Hello"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:14:56