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_user
和 become_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
安装后我正在用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_user
和 become_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