Ejecutar la tarea de Ansible como un usuario específico

23

Estoy tratando de ejecutar una tarea Ansible específica como un usuario diferente al que está ejecutando el libro de jugadas. Mi .ymlarchivo se ve así:

---

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

La ejecución de esta tarea me muestra que el whoamicomando devuelve un usuario diferente al que definí en la tarea (precisamente, devuelve el usuario que está definido en el hostsarchivo llamado ubuntu).

También intenté definir la tarea de esta manera:

---

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

pero luego Missing sudo passwordaparece el error ' ', aunque hay una línea en el sudoersarchivo que dice someusername ALL=(ALL) NOPASSWD:ALLy emite comandos con sudouna máquina remota, ya someusernameque no me pide una contraseña.

Entonces, ¿cómo puedo ejecutar la tarea específica como un usuario diferente que no es el usuario definido en el hostsarchivo o rootél mismo?

errata
fuente

Respuestas:

19

Está malinterpretando ambas configuraciones allí:

  • remote_user es una configuración de Ansible que controla el usuario SSH que Ansible usa para conectarse:ssh ${REMOTE_USER}@remotehost

  • someusername ALL = (ALL) NOPASSWD: ALL es una configuración de sudo que permite al usuario someusernameejecutar todos los comandos en cualquier host sin contraseña. No permite que nadie emita comandos como someusernamesi así fuera.

Idealmente, debería iniciar sesión directamente como el usuario correcto y de eso remote_userse trata. Pero, por lo general, solo puede iniciar sesión como usuario administrativo (digamos ubuntu) y debe sudo los comandos como otro usuario (digamos scrapy). Luego debe dejar remote_useral usuario que inicia sesión y agregar las siguientes propiedades ansibles al trabajo:

- name: log in as ubuntu and do something as scrapy
  remote_user: ubuntu
  sudo: true
  sudo_user: scrapy
  shell: do-something.sh
Capi Etheriel
fuente
1
Veo. ¡Muchas gracias por aclarar esto! ¿Pero cómo ejecutar una tarea específica como un usuario específico entonces?
errata
1
Tenga en cuenta que el valor remote_userpredeterminado es el usuario actual en su máquina local, tal como lo hace ssh, en realidad.
Capi Etheriel
De acuerdo, pero con una configuración como esta, todavía recibo un Missing sudo passworderror. ¿Hay alguna manera de evitar pedir una contraseña para ese usuario específico?
errata
Creo que encontré la respuesta, agregando la línea a los sudoers: ubuntu ALL=(someusername) NOPASSWD: ALLpero tengo que pensar en la seguridad detrás de esto ... ¿Hay alguna otra forma, excepto agregar esta línea a los sudoers?
errata
1
la forma correcta sería permitir que su usuario remoto inicie sesión directamente.
Capi Etheriel
16

Tenga en cuenta que después de Ansible 1.9, la sudoredacción fue reemplazada por become, por lo tanto

sudo: yes
sudo_user: some_user

se convierte (juego de palabras):

become: yes
become_user: some_user

Ver más detalles aquí: /programming//a/22749788/402727

ex nerd
fuente