手动执行Ansible Playbook报“No existing session”错误的解决咨询
问题解决方案
1. 对齐Ansible版本
直接切换到cron使用的Ansible 2.9.27版本执行Playbook:
- 执行时指定完整路径:
/path/to/ansible-2.9.27/bin/ansible-playbook your_playbook.yml - 或者临时调整环境变量优先级:
export PATH=/path/to/ansible-2.9.27/bin:$PATH ansible-playbook your_playbook.yml
2. 适配Ansible 2.8.1的SSH参数
如果必须使用2.8.1版本,在Playbook或ansible.cfg中添加兼容配置,禁用SSH会话复用:
- Playbook内配置示例:
- hosts: SwitchA gather_facts: no vars: ansible_ssh_common_args: "-o ControlMaster=no -o ControlPath=None" ansible_ssh_pipelining: no tasks: # 你的任务内容 - 或修改当前目录下的
ansible.cfg:[ssh_connection] control_path = None control_master = no pipelining = no
3. 检查SwitchA的SSH会话限制
登录SwitchA查看SSH服务配置,确认是否限制了会话复用或特定连接方式:
- 华为设备执行:
display ssh server configuration - 思科设备执行:
show ip ssh - 确保设备允许非复用模式的SSH连接,无客户端会话模式限制
4. 同步环境变量
对比cron与手动执行的环境变量,确保SSH相关变量一致:
- 在cronjob中添加命令导出环境变量:
env > /tmp/cron_env.txt - 手动执行时加载该环境变量:
source /tmp/cron_env.txt && ansible-playbook your_playbook.yml
内容的提问来源于stack exchange,提问作者Eric Lo
相关产品推荐
相关产品推荐

