Uruchamianie zadania Ansible jako określony użytkownik

23

Próbuję uruchomić określone zadanie Ansible jako inny użytkownik niż ten, który prowadzi playbook. Mój .ymlplik wygląda następująco:

---

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

Uruchomienie tego zadania pokazuje mi, że whoamipolecenie zwraca innego użytkownika niż zdefiniowałem w zadaniu (dokładnie zwraca użytkownika zdefiniowanego w hostspliku o nazwie ubuntu).

Próbowałem też zdefiniować takie zadanie:

---

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

ale wtedy Missing sudo passwordpojawia się błąd „ ”, chociaż w sudoerspliku jest wiersz , który mówi someusername ALL=(ALL) NOPASSWD:ALLi wydaje polecenia sudona zdalnym komputerze, ponieważ someusernamenie pyta mnie o hasło.

Jak mogę uruchomić określone zadanie jako inny użytkownik, który nie jest użytkownikiem zdefiniowanym w hostspliku ani rootsam?

errata
źródło

Odpowiedzi:

19

Nie rozumiesz tam obu ustawień:

  • użytkownik zdalny to ustawienie Ansible, które kontroluje użytkownika SSH, którego używa Ansible do łączenia:ssh ${REMOTE_USER}@remotehost

  • someusername ALL = (ALL) NOPASSWD: ALL to konfiguracja sudo, która pozwala użytkownikowi someusernamewykonywać wszystkie polecenia na dowolnym hoście bez hasła. To nie pozwala nikomu wydawać poleceń tak, someusernamejakby.

Idealnie byłoby zalogować się bezpośrednio jako właściwy użytkownik i o to remote_userwłaśnie chodzi. Ale zazwyczaj jesteś w stanie zalogować się tylko jako użytkownik administracyjny (powiedzmy ubuntu) i musisz wykonywać polecenia sudo jako inny użytkownik (powiedzmy scrapy). Następnie powinieneś pozostawić remote_userużytkownika, który się zaloguje, i dodać do zadania następujące właściwości ansible:

- name: log in as ubuntu and do something as scrapy
  remote_user: ubuntu
  sudo: true
  sudo_user: scrapy
  shell: do-something.sh
Capi Etheriel
źródło
1
Widzę. Wielkie dzięki za wyjaśnienie tego! Ale jak uruchomić określone zadanie jako określony użytkownik?
errata
1
Zauważ, że remote_userdomyślnie jest to aktualny użytkownik na twoim komputerze lokalnym - tak jak robi to ssh.
Capi Etheriel
W porządku, ale przy takiej konfiguracji wciąż pojawia się Missing sudo passwordbłąd „ ”. Czy istnieje sposób na uniknięcie pytania o hasło dla tego konkretnego użytkownika?
errata
Myślę, że znalazłem odpowiedź, dodając wiersz do sudoers:, ubuntu ALL=(someusername) NOPASSWD: ALLale muszę pomyśleć o bezpieczeństwie za tym ... Czy jest jakiś inny sposób niż dodanie tego wiersza do sudoers?
errata
1
właściwym sposobem byłoby zezwolenie zdalnemu użytkownikowi na bezpośrednie logowanie.
Capi Etheriel
16

Zauważ, że po Ansible 1.9 sudosformułowanie zostało zastąpione becometym samym

sudo: yes
sudo_user: some_user

staje się (gra słów zamierzona):

become: yes
become_user: some_user

Zobacz więcej szczegółów tutaj: /programming//a/22749788/402727

były nerd
źródło