Вы можете войти локально на управление хостом как «Натан», но хочет подключиться к другим серверам, как «анзибль» (лучше пользователя в ansible.cfg)
remote_user = ansible
Если вы хотите на удаленном хосте подключить как «анзибль» и выполнить одну задачу, как корень или апач - то Судо к корню (Apache или другому пользователю), вы должны использовать become_user
для этой конкретной задачи ,
Обратите внимание, что удаленный сервер не может иметь такого пользователя, как на хосте управления! (В общем смысле)
В вашем конкретном случае, если вход в систему локально, как «Натан» и хотят подключиться к удаленному «» серверу как «Натан» следует опустить как remote_user
и become_user
: только вход в систему с текущими учетными данными!
Например, существует два sysadminst в организации: nathan и peter - так, есть две рабочие станции (heidelberg-nathan и berlin-peter) в качестве контролируемого хоста и тысячи клиентов. Оба натана и петер подключаются к удаленной стороне, как натан или петер, и выполняют задачи. Каждый из них может не использовать пароли для выполнения задач администратора.
PS Хорошо, давайте протестируем оба решения (сначала - из ответа Константина Суворова, второе - из ответа на ноу-хау).
My control host berlin-ansible-01, я вошел в систему как 'nathan'. Удаленным клиентом является клиент berlin-client-01. Я запишусь на клиентский хост как пользователь '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 }}"
Давайте запустим его:
[[email protected] 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
Используйте 'remote_user' вместо' become_user' подключить удаленную сторону. 'ste_user' предназначен для повышения привилегий. –