在清单文件中的 `ansible_ssh_common_args` 中使用 `remote_user`

Using `remote_user` in `ansible_ssh_common_args` in inventory file

在我的网络中有一台服务器(server2)无法直接访问。首先,您必须通过 ssh 连接到 server1,然后从那里连接到 server2。

我的配置文件包含以下行:

remote_user = foo.bar

我的库存:

 hosts:
   server1:
     ansible_host: 10.0.0.1
   server2:
     ansible_host: 10.0.0.2
     ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q foo.bar@10.0.0.1"'

这很好用,但我不想对用户名进行硬编码。 Here and here 有例子表明 remote_user 可以通过 {{ ansible_ssh_user }} 传递,但我无法让它工作。

我尝试了什么:

ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q {{ ansible_ssh_user }}@10.0.0.1"'

还尝试了 {{ ansible_user }}{{ user }}。但是当我 运行 ansible server2 -m ping 我得到一个错误

"The field 'ssh_common_args' has an invalid value, which includes an undefined variable. The error was: 'ansible_user' is undefined"

是否可以在 ansible_ssh_common_args 中使用 remote_user 定义的用户?

P.S。 ansible server1 -m ping 工作正常。

P.P.S。为测试目的编写了剧本:

- name: Playbook to test default user
  hosts: all
  gather_facts: false

  tasks:
  - name: Print default users
    debug:
      var: ansible_user

当我运行ansible-playbook test-default-user.yml --limit server1我得到

ok: [server1] => {
    "ansible_user": "foo.bar"
}

也适用于 ansible_ssh_user,但仅 {{ user }} 我得到

ok: [server1] => {
    "user": "VARIABLE IS NOT DEFINED!"
}

将这个问题写到 Ansible 邮件列表并得到了开发者的答复。 https://groups.google.com/g/ansible-project/c/fY5lAHCEHfA

简短摘要 - 它不应该以这种方式工作。在功能中会有一个特殊的组件来查询插件设置。