ansible 用户配置中的当前用户

ansible user current user in configuration

安装后我正在用ansible配置几台电脑

为此,我 运行 在本地机器上安装了 ansible。安装中的 "main" 用户通常有不同的名称。我想将该用户用于 become_user 等变量。 "main"用户也是调用ansible-playbook.

的用户

那么我能否以某种方式将 "become_user" 设置为调用 ansible-playbook 的用户?

ansible-playbook 提供 --become-user CLI 标志以及 --ask-become-pass(如果需要)。

在大多数情况下,这是一个糟糕的设置。您应该在所有机器上标准化 user,否则您必须为每个用户单独维护 certs/passwords。

不确定为什么需要将 become_user 设置为你已经 运行 你的剧本的用户,但你可以使用 env 查找来获取 USER 环境变量:

- hosts: localhost
  tasks:
    - debug: msg="{{ lookup('env','USER') }}"

当剧本应该 运行 与启动 ansible-playbook

的用户时,无需设置 become_user

become 用于提权。如果我答对了这个问题,则不需要提权。

运行剧本可用作 ansible fact {{ ansible_env.username }}

的用户名

您可以作为 'nathan' 在控制主机上本地登录,但想作为用户 'ansible' 连接到其他服务器(在 ansible.cfg 中更好)

remote_user = ansible

如果您希望在远程主机上以 'ansible' 身份连接并以 root 或 apache 身份执行一项任务——然后 sudo 到 root(apache 或其他用户)您应该使用 become_user 来完成此特定任务.

另请注意,远程服务器可能没有控制主机上的用户! (常用方式)

在您的特定情况下,如果您以 'nathan' 的身份在本地登录并希望以 'nathan' 的身份连接到 'remote' 服务器,您应该同时省略 remote_userbecome_user:只需使用您当前的凭据登录即可!

例如,组织中有两个系统管理员:nathan 和 peter -- 因此,有两个工作站(heidelberg-nathan 和 berlin-peter)作为可靠的控制主机和数千个客户端。 nathan 和 peter 都以 nathan 或 peter 的身份连接到远程端并执行任务。他们每个人都可以使用非密码 sudoers 来执行管理任务。

PS 好的,让我们测试这两个解决方案(第一个 - 来自 Konstantin Suvorov 的回答,第二个 - 来自 knowhy 的回答)。

我的控制主机 berlin-ansible-01,我以 'nathan' 登录。远程客户端是主机 berlin-client-01。我将以用户 'ansible'.

登录客户端主机

我的ansible.cfg是:

[defaults]
sudo_flags=-HE
hash_behaviour = merge
retry_files_enabled = false
log_path = ./main.log
ask_vault_pass=true
remote_user = ansible

剧本很简单:

- name: test
  hosts: '{{ target }}'
  tasks:
    - debug: msg="step 1 = {{ lookup('env','USER') }}"
    - setup:
    - debug: msg="step 2 = {{ hostvars[target].ansible_env.USER }}"
#more than one client in taget needs iterate items:
#    - debug: msg="step 2 = {{ hostvars[item].ansible_env.USER }}"
#      with_items: "{{ hostvars }}"

让我们运行它:

[nathan@berlin-ansible-01 Whosebug]$ ansible-playbook -i hosts_staging test.yml --extra-vars "target=berlin-client-01"
Vault password:

PLAY [test] ********************************************************************

TASK [setup] *******************************************************************
ok: [berlin-client-01]

TASK [debug] *******************************************************************
ok: [berlin-client-01] => {
    "msg": "step 1 = nathan"
}

TASK [setup] *******************************************************************
ok: [berlin-client-01]

TASK [debug] *******************************************************************
ok: [berlin-client-01] => {
    "msg": "step 2 = ansible"
}

PLAY RECAP *********************************************************************
berlin-client-01             : ok=4    changed=0    unreachable=0    failed=0