在我的网络中,有一台服务器(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