gpt4 book ai didi

ansible 与默认 remote_user 连接,即使我指定另一个

转载 作者:行者123 更新时间:2023-12-04 10:00:46 32 4
gpt4 key购买 nike

我使用主机上的 ansible 模块创建了一个虚拟 linux 服务器。这工作正常。
下一个任务应该使用添加用户“ansible”

- include: task-files/users_create_ansible_user.yml
delegate_to: '{{ createdserver.ipv4_address }}'
remote_user: root

如您所见,我在这里添加了 remote_user(我还将它添加到包含的任务中)。

但是,尽管有这两个 remote_user 条目,它仍会尝试与 ansible.cfg 中设置的 remote_user 连接(我将 remote_user 设置为“ansible”,因为我想在创建该用户后对其执行所有以下任务)。

更多细节:

这是包含的任务文件中的第一个任务(失败)
- name: "Create 'ansible' user"
remote_user: root
user:
name: "ansible"

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

如您所见,它没有与指定的 remote_user: root 连接,而是与用户“ansible”(尚未创建)连接。当我将 ansible.cfg 中的 remote_user 更改为 root 时……它可以在这里连接。

谁能指导我的误解?

最佳答案

问:“不与指定的 remote_user:root 连接,而是与用户 'ansible' 连接。”

答:很可能是remote_user被变量 ansible_user 覆盖.该变量具有更高的 precedence .见最后一节。例如


- set_fact:
ansible_user: admin
- command: whoami
remote_user: root
register: result
- debug:
var: result.stdout



    "result.stdout": "admin"

没有变量 ansible_user这应该有效。 remote_user在任务级别上定义。例如,

    - command: whoami
remote_user: admin
register: result
- debug:
var: result.stdout

- command: whoami
remote_user: root
register: result
- debug:
var: result.stdout



    "result.stdout": "admin"

"result.stdout": "root"

调试

将调试任务放入代码中,查看变量 ansible_user的值.例如

- debug:
var: ansible_user
- name: "Create 'ansible' user"
remote_user: root
user:
name: "ansible"

使用ansible_user

使用 ansible_user如果不应该有任何机会覆盖该值。

另见参数 remote_user SSH 连接插件。 remote_user是 Ansible 配置中的参数。相反,也可以使用变量 ansible_user从剧本或任务中更改远程用户。该变量具有最高 preference .见最后一节。例如

    - command: whoami
register: result
vars:
ansible_user: admin
- debug:
var: result.stdout

- command: whoami
register: result
vars:
ansible_user: root
- debug:
var: result.stdout


按预期工作并给予


"result.stdout": "admin"

"result.stdout": "root"
}

Best practice是使用 public key authentication使用 ssh-agent提供的私钥密码.

禁用root登录

但是,最佳做法是 Disable root login :“使用普通用户帐户与 sudo 一起启动您的连接。”例如

    - command: whoami
register: result
become: true
become_method: sudo
become_user: root
vars:
ansible_user: admin
- debug:
var: result.stdout



    "result.stdout": "root"

必须允许远程用户 admin sudo , 当然

root@test_01> cat /usr/local/etc/sudoers
...
admin ALL=(ALL) NOPASSWD: ALL

优先级

有必要了解许多配置参数可以被从游戏级别到任务级别的变量覆盖。在大多数情况下,这些变量是通过添加前缀 ansible_ 从参数名称创建的。 .变量 ansible_user和参数 remote_user是一个异常(exception)(FWIW,我不知道有任何其他异常(exception))。

同样重要的是要记住 variables got precedence over playbook's keywords .

例如, become directives也可以指定为变量。例如

    - command: whoami
register: result
vars:
ansible_user: admin
ansible_become: true
ansible_become_method: sudo
ansible_become_user: root
- debug:
var: result.stdout



    "result.stdout": "root"

关于ansible 与默认 remote_user 连接,即使我指定另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61834148/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com