配置中的ansible用户当前用户

时间:2016-08-25 11:12:21

标签: ansible ansible-playbook

我在安装后使用ansible配置多台计算机。

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

的用户

我可以以某种方式设置" become_user"给致电ansible-playbook的用户?

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

在大多数情况下,这是一个糟糕的设置。您应该在所有机器上标准化user,否则您将需要为每个用户单独维护证书/密码。

答案 2 :(得分:1)

当Playbook与开始使用的用户become_user

运行时,无需设置ansible-playbook

become用于权限提升。如果我得到这个问题,则不需要权限升级。

运行该剧本的用户名称以ansible fact {{ ansible_env.username }}

提供

答案 3 :(得分:1)

您可以在控制主机上本地登录为“nathan”,但希望以“ansible”用户身份连接到其他服务器(更好的是在ansible.cfg中)

remote_user = ansible

如果您希望远程主机连接为'ansible'并以root或apache执行一项任务 - 然后sudo到root(apache或其他用户),您应该使用become_user执行此特定任务。

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

在您的特定情况下,如果您在本地登录为“nathan”并希望以“nathan”身份连接到“远程”服务器,则应省略remote_userbecome_user:只需使用您当前的凭据登录!

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

PS好吧,让我们测试两种解决方案(首先 - 来自Konstantin Suvorov的答案,第二 - 来自知识的回答)。

我的控制主持人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

Playbook很简单:

- 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 stackoverflow]$ 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