Ansible local_action 在没有本地 ssh 守护进程的主机上

Mac*_*eek 8 ansible

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

如果我运行以下剧本:

- name: Test commands
  hosts: localhost
  connection: local
  gather_facts: false
  tasks:
    - name: Test local action
      local_action: command echo "hello world"
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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_action与 相同delegate_to: 127.0.0.1,因此 Ansible 尝试通过 ssh 连接到本地主机。但是,本地控制器主机上没有运行 SSH 守护程序(仅在远程机器上)。

所以我的直接问题是如何从 Ansible 运行特定命令,而无需 Ansible 首先尝试通过 SSH 连接到 localhost。


关键的补充,不在原来的问题中:

我的 host_vars 包含以下行:

ansible_connection: ssh
Run Code Online (Sandbox Code Playgroud)

fra*_*ijo 9

如何从 Ansible 运行特定命令,而无需 Ansible 首先尝试通过 SSH 连接到 localhost。

connection: local 足以使任务在不使用 SSH 的情况下在控制器中运行。

尝试,

- name: Test commands
  hosts: localhost
  connection: local
  gather_facts: false
  tasks:
    - name: Test local action
      command: echo "hello world"
Run Code Online (Sandbox Code Playgroud)

  • 谢谢@franklinsijo:似乎在任务的“vars”部分中设置“ansible_connection: local”确实允许我设置每个任务的连接类型。谢谢! (2认同)

Mac*_*eek 5

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

就我而言:

  1. ansible_connection被设置为sshhost_vars.
  2. ansible_host被设置localhostlocal_action.

这结合起来让我们ssh失败localhost了。

进一步考虑:

  • delegate_tolocal_actionsetansible_hostansible_connection,但 host_vars、剧本或任务中的任何设置都会覆盖它。
  • connection: local仅设置ansible_connectionansible_host未修改),但ansible_connectionhost_vars、剧本或任务中的任何设置都会覆盖它。

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