Menjalankan tugas yang mungkin sebagai pengguna tertentu

23

Saya mencoba menjalankan tugas Ansible tertentu sebagai pengguna yang berbeda dari yang menjalankan playbook. .ymlFile saya terlihat seperti ini:

---

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

Menjalankan tugas ini menunjukkan kepada saya bahwa whoamiperintah mengembalikan pengguna yang berbeda dari yang saya tetapkan dalam tugas (tepatnya, mengembalikan pengguna yang didefinisikan dalam hostsfile yang dipanggil ubuntu).

Saya juga mencoba mendefinisikan tugas seperti ini:

---

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

tapi kemudian saya mendapatkan Missing sudo passwordkesalahan, meskipun ada baris dalam sudoersfile yang mengatakan someusername ALL=(ALL) NOPASSWD:ALLdan mengeluarkan perintah dengan sudopada mesin remote karena someusernametidak meminta saya untuk kata sandi.

Jadi, bagaimana saya bisa menjalankan tugas tertentu sebagai pengguna yang berbeda yang bukan pengguna yang ditentukan dalam hostsfile atau rootdirinya sendiri?

errata
sumber

Jawaban:

19

Anda salah memahami kedua pengaturan di sana:

  • remote_user adalah pengaturan Ansible yang mengontrol SSH pengguna Ansible gunakan untuk menghubungkan:ssh ${REMOTE_USER}@remotehost

  • someusername ALL = (ALL) NOPASSWD: ALL adalah konfigurasi sudo yang memungkinkan pengguna someusernameuntuk menjalankan semua perintah di host mana pun tanpa kata sandi. Itu tidak memungkinkan siapa pun untuk mengeluarkan perintah seolah- someusernameolah.

Idealnya, Anda akan masuk secara langsung sebagai pengguna yang tepat dan itulah masalahnya remote_user. Tetapi biasanya Anda hanya dapat masuk sebagai pengguna administratif (katakanlah ubuntu) dan harus menjalankan perintah sudo sebagai pengguna lain (katakanlah scrapy). Maka Anda harus pergi remote_userke pengguna yang masuk dan menambahkan properti yang mungkin berikut untuk pekerjaan:

- name: log in as ubuntu and do something as scrapy
  remote_user: ubuntu
  sudo: true
  sudo_user: scrapy
  shell: do-something.sh
Capi Etheriel
sumber
1
Saya melihat. Terima kasih banyak untuk mengklarifikasi ini! Tetapi bagaimana menjalankan tugas tertentu sebagai pengguna tertentu?
errata
1
Perhatikan bahwa remote_userdefault untuk pengguna saat ini di mesin lokal Anda - seperti halnya ssh, sebenarnya.
Capi Etheriel
Baiklah, tapi dengan setup seperti ini saya masih mendapatkan Missing sudo passworderror. Apakah ada cara untuk menghindari meminta kata sandi untuk pengguna tertentu?
errata
Saya rasa saya menemukan jawabannya, menambahkan baris ke sudoers:, ubuntu ALL=(someusername) NOPASSWD: ALLtapi saya harus memikirkan keamanan di balik ini ... Apakah ada cara lain selain menambahkan baris ini ke sudoers?
errata
1
cara yang tepat adalah membiarkan pengguna jarak jauh Anda masuk secara langsung.
Capi Etheriel
16

Perhatikan bahwa setelah Ansible 1.9, sudokata - kata itu diganti dengan become, dengan demikian

sudo: yes
sudo_user: some_user

menjadi (pun intended):

become: yes
become_user: some_user

Lihat lebih spesifik di sini: /programming//a/22749788/402727

mantan kutu buku
sumber