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
排查与解决步骤
优先验证防火墙连接限制
你怀疑防火墙拦截重复SSH连接的方向是对的,直接联系网络管理员确认:- 目标VM所在的网络防火墙/安全组是否配置了SSH连接速率限制、并发连接数阈值
- 可以临时关闭目标VM本地防火墙(如
systemctl stop firewalld或ufw disable),重新执行playbook的check模式,快速验证是否是本地防火墙导致的拦截
启用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"
- 编辑
检查目标主机SSHD配置
登录vm01查看/etc/ssh/sshd_config,确认以下参数是否限制了连接:MaxStartups:控制未认证连接的最大数量,默认是10:30:100,可以适当调大MaxSessions:单个TCP连接允许的最大会话数,默认10
修改后重启sshd服务:systemctl restart sshd
隔离测试时区任务
编写极简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
相关产品推荐
相关产品推荐

