已配置connection: local,如何阻止Ansible执行时调用SSH?
解决Ansible本地运行仍调用SSH的问题
问题原因
即便设置了connection: local,Ansible仍会触发SSH,是因为默认会对清单中的非localhost主机执行连通性验证,这个步骤会自动发起SSH尝试,哪怕你没有要执行的远程任务。
解决方案
以下三种方式可以彻底禁用SSH调用:
方式1:在清单中全局设置本地连接变量
直接在inventory.yml里给所有主机添加ansible_connection: local变量,明确告诉Ansible无需使用SSH:
# inventory.yml 示例 all: vars: ansible_connection: local children: web_servers: hosts: web01: web02: db_servers: hosts: db01:
方式2:修改Playbook添加SSH禁用参数
在Playbook中补充remote_user(设为本地用户)和ansible_ssh_common_args参数,阻止SSH连接尝试:
- name: 收集主机组信息 hosts: 'all' connection: local gather_facts: false remote_user: "{{ ansible_user_id }}" vars: ansible_ssh_common_args: '-o ControlMaster=no' tasks: - name: 输出主机所属组 ansible.builtin.debug: msg: "{{ inventory_hostname }} {{ group_names | to_json }}"
方式3:直接用ansible-inventory命令导出信息
如果只是需要主机-组对应关系,完全不需要写Playbook,用Ansible自带命令直接导出结构化数据:
ansible-inventory -i inventory.yml --list
该命令全程本地运行,不会触发任何SSH连接,输出的JSON格式可直接用jq等工具处理提取所需信息。
验证
修改后重新运行Playbook或执行ansible-inventory命令,不会再出现SSH密码提示,所有操作均在本地完成。
内容的提问来源于stack exchange,提问作者anthony
相关产品推荐
相关产品推荐

