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

Ansible执行第二个任务时SSH连接失败问题求助

Ansible Playbook SSH连接重置问题排查方案

现象梳理

  • 运行包含common角色的playbook时,设置主机名任务执行成功,但后续设置UTC时区任务报错SSH连接重置
  • 手动SSH连接目标主机vm01完全正常
  • 执行命令:ansible-playbook new_deployment.yml -i hosts -l vm01 --check --ask-become-pass -vvv

排查与解决步骤

  1. 优先验证防火墙连接限制
    你怀疑防火墙拦截重复SSH连接的方向是对的,直接联系网络管理员确认:

    • 目标VM所在的网络防火墙/安全组是否配置了SSH连接速率限制、并发连接数阈值
    • 可以临时关闭目标VM本地防火墙(如systemctl stop firewalld或ufw disable),重新执行playbook的check模式,快速验证是否是本地防火墙导致的拦截
  2. 启用Ansible SSH连接复用
    Ansible默认每次任务新建SSH连接,容易触发频率限制,修改配置复用连接:

    • 编辑ansible.cfg添加以下配置:
      [ssh_connection]
      control_master = auto
      control_persist = 120s
      control_path = ~/.ansible/cp/%%h-%%r
      
    • 或者直接在执行命令时临时追加参数:
      ansible-playbook new_deployment.yml -i hosts -l vm01 --check --ask-become-pass -vvv --ssh-extra-args="-o ControlMaster=auto -o ControlPersist=120s"
      
  3. 检查目标主机SSHD配置
    登录vm01查看/etc/ssh/sshd_config,确认以下参数是否限制了连接:

    • MaxStartups:控制未认证连接的最大数量,默认是10:30:100,可以适当调大
    • MaxSessions:单个TCP连接允许的最大会话数,默认10
      修改后重启sshd服务:systemctl restart sshd
  4. 隔离测试时区任务
    编写极简playbook单独测试时区设置任务,排除角色内其他逻辑干扰:

    - name: Isolate timezone task test
      hosts: vm01
      become: true
      tasks:
        - name: Set timezone to UTC
          ansible.builtin.timezone:
            name: UTC
    

    执行该测试playbook,如果仍报错,说明问题集中在连接层面;如果成功,可能是common角色内前序任务触发了某种连接限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:57:13