ansible用户配置中的当前用户

ansible用户配置中的当前用户,ansible,ansible-playbook,Ansible,Ansible Playbook,我正在使用ansible配置安装后的几台计算机 为此,我在机器上本地运行ansible。安装上的“主”用户通常有不同的名称。我想将该用户用于变量,如变成\u user。“主要”用户也是调用ansible playbook的用户 因此,我是否可以将“成为用户”设置为调用ansible playbook的用户?ansible playbook提供--成为用户CLI标志以及--询问成为通过(如果需要) 在大多数情况下,这是一个糟糕的设置。您应该在所有计算机上标准化用户,否则您必须分别为每个用户维护证书

我正在使用ansible配置安装后的几台计算机

为此,我在机器上本地运行ansible。安装上的“主”用户通常有不同的名称。我想将该用户用于变量,如
变成\u user
。“主要”用户也是调用
ansible playbook
的用户


因此,我是否可以将“成为用户”设置为调用
ansible playbook
的用户?

ansible playbook
提供
--成为用户
CLI标志以及
--询问成为通过
(如果需要)


在大多数情况下,这是一个糟糕的设置。您应该在所有计算机上标准化
用户
,否则您必须分别为每个用户维护证书/密码。

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

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

当playbook应该与启动ansible playbook的用户一起运行时,无需设置
成为\u用户

用于权限升级。如果我答对了这个问题,就不需要特权升级


运行playbook的用户的名称可作为
ansible事实
{{ansible_env.username}}

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

如果您希望在远程主机上以“ansible”身份连接并以root或apache身份执行一项任务,那么sudo to root(apache或其他用户)应该使用
been_user
来执行此特定任务

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

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

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

好的,让我们测试两个解决方案(第一个-来自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 }}"
让我们运行它:


谢谢用户名不同,因为我使用ansible进行计算机的私人设置。这不是它的本意,但仍然非常有效。我意识到:-)@AK为什么?OP需要用户名env在他的剧本中(尽管我不知道为什么)——我给他一个选择。并强调他不应该以这种方式成为用户。这是一个很好的解决方案!OP uu在机器上本地运行ansible u@KonstantinSuvorov当然可以,但这通常是不正确的。我在问题中添加了一条备注。使用
remote\u user
而不是
been\u user
连接远程端
been_user
用于权限升级。关于权限升级,您是对的。事实收集在远程端,所以您的解决方案只适用于控制主机和客户机主机相同的情况(请参阅我答案中的详细信息)
- 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