我可以在 host_vars 或 group_vars 中设置 remote_user 吗?

Can I set remote_user in host_vars or group_vars?

我开始用 ansible 编写我的第一本正式剧本。

我想做的是为每个主机指定不同的 remote_user 值。我可以通过 CLI -u 选项甚至在播放变量中在 ansible.cfg 中设置 remote_user,如下所示:

---
- name: install dependencies
  hosts: all
  sudo: yes
  vars:
    remote_user: username

但是在主机或组级别设置 var(这对我的方法最有意义)将不起作用。例如,将此文件设置为 group_vars/all 会给我一个 "Authentication failure" 致命错误:

---
remote_user: username

我错过了什么?

您所做的似乎没有记录。具体来说,你有这个:

vars:
  remote_user: username

当时,根据documentation,应该是这样的:

remote_user: username

当你以错误的方式做时它碰巧起作用的事实是无关紧要的。有一些副作用使它在那种情况下工作,但当然在另一种情况下它不会工作,并且它可能在不同的 Ansible 版本中表现不同。

要在每个主机中以不同的用户身份登录,通常的方法是在 inventory. Whether this is a variable that can be overridden in host_vars or group_vars I'm not certain. See also issue 4688 中指定 ansible_ssh_user 以获取有关 ansible_ssh_userremote_user 如何可能的信息互相覆盖。

在您的组或主机变量中添加一个名称类似于 playbook_username 的新变量,然后在您的剧本中将 remote_user 更改为这样的名称 - remote_user: "{{ playbook_username }}"

通常主机变量似乎不会覆盖 remote_user,但此变通方法效果很好