在库存文件的"ansible_ssh_common_args"中使用"remote_use



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

我的配置文件有以下行:

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"'

这工作正常,但我不希望用户名被硬编码。这里和这里有一些例子,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定义的用户?

附言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

简短的总结 - 它不应该以这种方式工作。将来会有一个特殊的组件来查询插件设置。

更新 20.06.2023 - 以下内容现在有效:ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q {{ ansible_ssh_user }}@10.0.0.1"'

安斯布尔版本 2.12.10

最新更新