`remote_user` 在剧本和角色中被忽略

`remote_user` is ignored in playbooks and roles

我在 ansible.cfg

中定义了以下内容
# default user to use for playbooks if user is not specified
# (/usr/bin/ansible will use current user as default)
remote_user = ansible

但是我有一个剧本 bootstrap.yaml,我在其中连接 root 而不是 ansible

---
- hosts: "{{ target }}"
  become: no
  gather_facts: false
  remote_user: root

  vars:
    os_family: "{{ osfamily }}}"

  roles:
  - role: papanito.bootstrap

但是 remote_user: root 似乎被忽略了,因为我总是收到连接错误,因为它使用用户 ansible 而不是 root 进行 ssh 连接

fatal: [node001]: UNREACHABLE! => {"changed": false,
"msg": "Failed to connect to the host via ssh:
 ansible@node001: Permission denied (publickey,password).", 
"unreachable": true}

我能找到的唯一解决方法是使用 -e ansible_user=root 调用剧本。但这并不方便,因为我想用 site.yaml 调用多个剧本,其中第一个剧本必须 运行 和 ansible_user root,而其他剧本必须 运行 与 ansible

- import_playbook: playbooks/bootstrap.yml
- import_playbook: playbooks/networking.yml
- import_playbook: playbooks/monitoring.yml

有什么我遗漏的或如何解决的建议吗?

试试这个

代替“remote_user: root”使用“remote_user: ansible”和额外的“become: yes”,”become_user: root”,”become_method : sudo 或 su”

Q: "remote_user: root is ignored"

答:剧本按预期工作

- hosts: test_01
  gather_facts: false
  become: no
  remote_user: root
  tasks:
    - command: whoami
      register: result
    - debug:
        var: result.stdout

给予

"result.stdout": "root"

但是,可以在清单中覆盖该变量。例如库存

$ cat hosts
all:
  hosts:
    test_01:
  vars:
    ansible_connection: ssh
    ansible_user: admin

结果是

"result.stdout": "admin"

使用命令仔细检查库存

$ ansible-inventory --list


笔记

我遇到了类似的问题,其中 ec2 实例需要不同的用户名才能使用 ssh。你可以试试下面的例子

 - import_playbook: playbooks/bootstrap.yml
   vars:
     ansible_ssh_user: root