¿En qué usuario Ansible ejecutará mis commands?

Fondo

Mi pregunta parece simple, pero se vuelve más compleja muy rápido.

Básicamente, me cansé de mantener mis serveres de forma manual (gritos en el background) y decidí que era hora de encontrar una manera de hacer que ser un administrador de serveres fuera mucho más habitable. Fue entonces cuando encontré a Ansible. Genial, ¿eh? Claramente gana haciendo scripts bash (grito más fuerte) para todo lo que quería automatizar.

¿Cuál es el problema?

Tengo muchos problemas para averiguar en qué usuario ejecutará mi libro de estrategias de ansible. También necesito la capacidad de especificar con qué usuario se ejecutarán ciertas tareas. Aquí hay algunos casos de uso específicos:

Clonación de un repository como otro usuario:

Mi propósito con esto es ejecutar mi webapp de node.js desde otro usuario, a quien llamaremos bill (que solo puede usar sudo para ejecutar un script que hice que inicia el server de nodo, a diferencia de root o mi usuario que puede use sudo para todos los commands). Para hacer esto, necesito la capacidad de hacer que el module git de Ansible clone mi git repo como factura . ¿Como podría hacerlo?

Saber cómo Ansible ganará la raíz:

Por lo que yo entiendo, puede establecer qué usuario Ansible se conectará al server que está manteniendo al definir 'usuario' y al comienzo del file de libro de estrategias. Esto es lo que no entiendo: si le digo que se conecte a través de mi nombre de usuario, joe , y le pido que actualice un package a través del module apt, ¿cómo se ganará la raíz? Sudo generalmente me pide mi contraseña, y prefiero mantenerlo así (por security).

Solicitud final

Revisé los documentos de Ansible, hice un poco (lo que pensé que era exhaustivo) en Google y, en general, solo traté de resolverlo por mi count, pero esta información continúa ilustrándome.

Soy muy nuevo en Ansible, y si bien es bastante directo, me beneficiaría mucho si pudiera entender exactamente cómo se ejecuta ansible, en qué usuarios se ejecuta y cómo / dónde puedo especificar qué usuario usar en diferentes momentos.

Gracias toneladas por adelantado

Puede resultarle útil leer la sección de Anfitrionas y Usuarios en el sitio de documentation de Ansible:

http://docs.ansible.com/playbooks_intro.html#hosts-and-users

En resumen, ansible ejecutará todos los commands en un libro de jugadas como el usuario especificado en la variable remote_user (suponiendo que esté usando ansible> = 1.4, user anterior). También puede especificar esta variable por tarea, en caso de que una tarea deba ejecutarse como un determinado usuario.

Use sudo: true en cualquier libro de jugadas / tarea para usar sudo para ejecutarlo. Use la variable sudo_user para especificar un usuario a sudo si no desea usar root .

En la práctica, me pareció más fácil ejecutar mi libro de jugadas como un usuario de deploy que tiene privilegios sudo. Configuré mis keys SSH para que pueda SSH en cualquier host como deploy sin usar una contraseña. Esto significa que puedo ejecutar mi libro de jugadas sin usar una contraseña e incluso usar sudo si es necesario.

Uso este mismo usuario para hacer cosas como clonar repositorys git e iniciar / detener services. Si un service necesita ejecutarse como un usuario de menor privilegio, dejo que el script de inicio se encargue de eso. Una búsqueda rápida en Google de un script node.js init.d reveló esto para CentOS:

https://gist.github.com/nariyu/1211413

Hacer las cosas de esta manera ayuda a mantenerlo simple, que me gusta.

Espero que ayude.

Mis 2 centavos:

  1. Ansible utiliza su usuario local (por ejemplo, Mike) para enviar ssh a la máquina remota. (Eso requirió que Mike fuera capaz de enviar ssh a la máquina)
  2. A partir de ahí, puede cambiar a un usuario remoto si es necesario
  3. También puede sudo si es necesario y si Mike está permitido. Si no se especifica ningún usuario, la raíz se seleccionará mediante su ~/.ansible.cfg en su máquina local.
  4. Si le proporciona a un remote_user el sudo param entonces como no.3, no usará root sino ese usuario.

Puede especificar diferentes situaciones y diferentes usuarios o sudo a través de los libros de jugadas .

Playbook's define qué roles se ejecutarán en cada máquina que pertenece al deviseio seleccionado.

Le sugiero que lea las mejores prácticas de Ansible para get alguna explicación sobre cómo configurar su infraestructura.

Ah y, por cierto, ya que no se está refiriendo a un module específico que usa ansible y su pregunta no está relacionada con Python, entonces no encuentro ningún uso que su pregunta tenga la label de python.

Solo una nota de que Ansible> = 1.9 usa commands de escalamiento de privilegios para que pueda ejecutar tareas y crear resources como ese usuario secundario si es necesario:

 - name: Install software shell: "curl -s get.dangerous_software.install | sudo bash" become_user: root 

http://docs.ansible.com/ansible/become.html#become-privilege-escalation