没有本地ssh守护程序的主机上的ansible local_action

时间:2020-04-18 20:09:28

标签: ansible

如果该控制服务器没有运行SSH守护程序,该如何在Ansible控制服务器上运行本地命令?

如果我运行以下剧本:

- name: Test commands
  hosts: localhost
  connection: local
  gather_facts: false
  tasks:
    - name: Test local action
      local_action: command echo "hello world"

我收到以下错误:

fatal: [localhost]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host localhost port 22: Connection refused", "unreachable": true}

似乎local_actiondelegate_to: 127.0.0.1相同,因此Ansible尝试ssh到本地主机。但是,本地控制器主机上(仅在远程计算机上)没有运行SSH守护程序。

所以我的迫切问题是如何从Ansible运行特定命令,而Ansible却没有先尝试通过SSH到本地主机。


关键性加法,而不是原始问题:

我的host_vars包含以下行:

ansible_connection: ssh

3 个答案:

答案 0 :(得分:3)

如何从Ansible运行特定命令,而无需Ansible首先尝试通过SSH到本地主机。

connection: local足以使任务在控制器中运行而无需使用SSH。

尝试

- name: Test commands
  hosts: localhost
  connection: local
  gather_facts: false
  tasks:
    - name: Test local action
      command: echo "hello world"

答案 1 :(得分:1)

我自己回答细节,也许对某人有用:

就我而言:

  1. ansible_connectionssh中设置为host_vars
  2. ansible_hostlocalhost设置为local_action

此操作使失败的sshlocalhost组合起来。

更多注意事项:

  • delegate_tolocal_action设置了ansible_hostansible_connection,但是host_vars,剧本或任务中的任何设置都会覆盖它们。
  • connection: local仅设置ansible_connectionansible_host未修改),但是host_vars,剧本或任务中的ansible_connection设置均会覆盖它。

所以我的解决方案是在host_vars中删除ansible_connection,或者在任务中设置var ansible_connection

答案 2 :(得分:0)

这对我来说看起来不对。

- name: import profiles of VMs   
  connection: local   
  hosts: localhost   
  gather_facts: false   
  tasks:
    - name: list files
      find:
        paths: .
        recurse: no
      delegate_to: localhost

他还在问我 ssh 密码:

❯ ansible-playbook playbooks/import_vm_profiles.yml  -i localhost, -k [WARNING]: Unable to parse the plugin filter file /Users/fredericclement/devops/ansible_refactored/etc/Plugin_filters.yml as module_blacklist is not a list. Skipping. 
SSH password: