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

Ansible执行长时长远程脚本后连接不可达问题求助

是的,这大概率是SSH长连接超时引发的问题

从你描述的现象——30分钟能正常跑完、1小时就触发unreachable错误——来看,核心原因几乎可以确定是长时间空闲的SSH连接被中间网络设备或SSH服务本身断开了。

当你的脚本运行1小时时,Ansible和远程主机的SSH连接在脚本执行期间没有任何交互数据(脚本只是在远程端后台运行,没有输出回传或者Ansible的指令交互),这种“空闲”状态会触发很多网络设备(比如防火墙、路由器)的超时机制,它们会主动切断长时间没有流量的连接;另外,SSH服务本身也有默认的空闲超时配置,超过时间就会断开连接。

下面是几个针对性的解决办法,按优先级推荐:

1. 给Ansible配置SSH心跳包

修改你的Ansible配置文件(ansible.cfg),在[ssh_connection]段添加保持连接的参数:

[ssh_connection]
ssh_args = -o ServerAliveInterval=60 -o ServerAliveCountMax=10
  • ServerAliveInterval=60:每60秒向远程主机发送一个心跳包,告诉连接“我还活着”
  • ServerAliveCountMax=10:如果连续10次心跳都没收到回应,才判定连接断开(避免偶尔网络波动误判)

这个方法不需要修改远程主机配置,是最快捷的解决方案。

2. 调整远程主机的SSHD配置

如果上面的方法无效,可以从远程主机端主动维持连接:

  1. 编辑远程主机的/etc/ssh/sshd_config,添加或修改以下配置:
ClientAliveInterval 60
ClientAliveCountMax 10
  • ClientAliveInterval:远程主机每60秒向Ansible发送一次心跳
  • ClientAliveCountMax:允许连续10次心跳无回应再断开
  1. 重启SSHD服务生效:
systemctl restart sshd

3. 让脚本后台运行并轮询状态(适合无实时输出需求的场景)

如果你的脚本不需要实时输出到Ansible日志,可以把脚本放到后台运行,然后通过等待标记文件的方式判断任务完成,这样Ansible的wait_for模块会定期发送检查请求,保持连接活跃:

- hosts: remote_host
  become: yes
  gather_facts: true
  connection: ssh
  tasks:
    - name: Run script in background
      shell: nohup bash /root/script.sh > /root/script.log 2>&1 & touch /root/script.running && echo $!
      register: script_pid

    - name: Wait for script to finish
      wait_for:
        path: /root/script.complete
        state: present
      timeout: 3600  # 这里设置为你的脚本最长运行时间(秒)
      register: script_finish

    - name: Clean up marker files
      file:
        path: "{{ item }}"
        state: absent
      loop:
        - /root/script.running
        - /root/script.complete
      when: script_finish is succeeded

注意:需要在你的script.sh末尾添加一行touch /root/script.complete,用来标记脚本执行完成。

4. 检查Jenkins的任务超时设置

别忘了确认Jenkins任务本身的超时配置——如果Jenkins任务的超时时间被设为30分钟,那么哪怕Ansible能维持连接,Jenkins也会主动终止运行了1小时的任务,导致你看到类似的失败。去Jenkins任务配置里找到“超时时间”选项,调整为符合你需求的时长。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:07:47