Виконання завдання з відповіді як конкретний користувач


23

Я намагаюся виконати конкретне завдання Ansible як інший користувач, ніж той, хто працює з ігровою книжкою. Мій .ymlфайл виглядає приблизно так:

---

- hosts: staging_servers
  tasks:    
    - name: check user
      remote_user: someusername
      shell: whoami

Виконання цього завдання показує мені, що whoamiкоманда повертає іншого користувача, ніж я визначив у задачі (точно, повертає користувача, визначеного у hostsфайлі, що називається ubuntu).

Я також намагався визначити таке завдання:

---

- hosts: staging_servers
  tasks:
    - name: check user
      sudo: yes
      sudo_user: someusername
      shell: whoami

але тоді я отримую Missing sudo passwordпомилку ' ', хоча у sudoersфайлі є рядок, який говорить someusername ALL=(ALL) NOPASSWD:ALLі видає команди sudoна віддаленій машині, оскільки someusernameне запитує мене паролем.

Отже, як я можу виконати конкретну задачу як інший користувач, який не визначений користувачем у hostsфайлі чи rootвін сам?

Відповіді:


19

Ви нерозумієте обидва налаштування там:

  • remote_user - це налаштування Ansible, яке керує SSH користувачем Ansible, який використовується для підключення:ssh ${REMOTE_USER}@remotehost

  • someusername ALL = (ALL) NOPASSWD: ALL - це конфігурація sudo, яка дозволяє користувачеві someusernameвиконувати всі команди в будь-якому хості без пароля. Це не дозволяє нікому видавати команди як someusernameби.

В ідеалі ви б увійшли безпосередньо в систему як потрібний користувач, і ось про що remote_userйдеться. Але зазвичай ви можете лише ввійти як адміністративний користувач (скажімо, ubuntu) і доводиться виконувати команди sudo як інший користувач (скажімо scrapy). Тоді ви повинні залишити remote_userкористувачеві, який входить у систему, і додати до завдання такі відповідні властивості:

- name: log in as ubuntu and do something as scrapy
  remote_user: ubuntu
  sudo: true
  sudo_user: scrapy
  shell: do-something.sh

1
Розумію. Дуже дякую за роз’яснення цього! Але як запустити конкретне завдання як конкретний користувач тоді?
errata

1
Зауважте, що remote_userза замовчуванням поточний користувач у вашій локальній машині - як і в ssh.
Capi Etheriel

Добре, але при такому налаштуванні я все-таки отримую Missing sudo passwordпомилку ' '. Чи є спосіб уникнути запиту пароля для конкретного користувача?
errata

Я думаю, що я знайшов відповідь, додавши рядок до судорів: ubuntu ALL=(someusername) NOPASSWD: ALLале я повинен думати про безпеку, що стоїть за цим ... Чи є інший спосіб, окрім додавання цієї лінії до судодерів?
errata

1
належним чином було б дозволити віддаленому користувачеві безпосередньо входити в систему.
Capi Etheriel

16

Зауважте, що після відповіді 1.9 sudoформулювання було замінено becomeтаким чином

sudo: yes
sudo_user: some_user

стає (каламбур призначений):

become: yes
become_user: some_user

Детальнішу інформацію див. Тут: /programming//a/22749788/402727

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.