我在安装后使用ansible配置多台计算机。
为此,我在机器上本地运行ansible。 "主要"安装上的用户通常有不同的名称。我想将该用户用于become_user
之类的变量。 "主要"用户也是调用ansible-playbook
。
我可以以某种方式设置" become_user"给致电ansible-playbook
的用户?
答案 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_user
和become_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