Advertisement
Guest User

Untitled

a guest
Jan 11th, 2023
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.62 KB | None | 0 0
  1. # Ansible
  2.  
  3. ## Instalación de ansible
  4.  
  5. Para debian 11 se ha de ejecutar los siguientes comandos
  6.  
  7. ```
  8. apt update
  9. apt-get install -y gnupg2 curl wget sshpass python3 python3-pip
  10. pip install ansible
  11. python --version
  12. ```
  13.  
  14. Si no está python (-v2) instalado, podeis instalar tambien
  15.  
  16. ```
  17. apt install -y python-is-python3
  18. ```
  19.  
  20. Y luego algunos plugins que facilitan a la hora de trabajar con playbooks
  21.  
  22. ```
  23. ansible-galaxy collection install community.general
  24. ```
  25.  
  26. ## Inventario
  27.  
  28. El inventory no es mas que un fichero de texto que contiene la información de los nodos a los que conectarse. Puede contener variables (como el usuario que ha de usar para conectarse) que si no se han indicado en el Playbook vendrán como defaults. El fichero puede estar guardado donde querais, porque con el parametro `-i /ruta/fichero/inventario.ini` se le puede indicar cual ha de usar. Personalmente tengo 3 ficheros de inventario para evitar errores mios y de mis compañeros.
  29.  
  30. ```
  31. miserver1 ansible_host=94.15.24.21 ansible_ssh_port=22
  32. miserver2 ansible_host=94.15.24.22 ansible_ssh_port=22
  33. ```
  34.  
  35. También permite agrupar los servidores en grupos y lanzar los playbooks a los grupos, por ejemplo si se quiere lanzar un comando a todos los webservers, en el inventario tendremos que tener lo que indica #1
  36.  
  37.  
  38. ```
  39. miserver1 ansible_host=94.15.24.21 ansible_ssh_port=22
  40. miserver2 ansible_host=94.15.24.22 ansible_ssh_port=22
  41.  
  42. [web_servers]
  43. miwebserver1 ansible_host=94.15.24.23 ansible_ssh_port=22
  44. miwebserver2 ansible_host=94.15.24.24 ansible_ssh_port=22
  45. ```
  46.  
  47. En el playbook se podrá indicar que se lance contra ese grupo.
  48.  
  49. Si tenemos servidores que usan la misma nomenclatura y se resuelven por FQDN, podemos hacer algo asi en el fichero de inventario para evitar tener que escribir los supongamos 50 hosts ..
  50.  
  51. ```
  52. [web_servers]
  53. miwebserver[1:50].midominio.com ansible_ssh_port=22
  54. ```
  55.  
  56. A la hora de ejecutar el playbook, ansible ya se encargará de iterar por los 50 nodos.
  57.  
  58. ## Conectando con los clientes
  59.  
  60. La primera vez que conecteis con los clientes se deben aceptar las SSH fingerprints... por lo que hay una forma rapida de indicarle que los acepte
  61.  
  62. ```
  63. ansible -i /ruta/fichero/inventario.ini -m ping all --ssh-common-args='-o StrictHostKeyChecking=no --ask-pass
  64. ```
  65.  
  66. El parametro ssh-common-args aceptará todos los fingerprints sin preguntar, por eso es importante solo usarlo 1 vez, a la hora de aceptar todos los fingerprints, luego no se ha de poner, así si un servidor ha cambiado, podremos darnos cuenta ya que a la hora de ejecutar el playbook saltará un error indicando que el **fingerprint no coincide**. También la primera vez como no tendremos usuario, con el parametro --ask-pass se le indica que ha de preguntar contraseña en vez de intentar conectar por ssh public key.
  67.  
  68. La idea es crear posteriormente un usuario que use ssh key para conectar y trabajar.
  69.  
  70. # Trabajar con Playbooks
  71.  
  72. ### Comprobar syntaxis
  73.  
  74. Comprueba si el fichero yaml tiene algun error de sintaxis (mala tabulacion, nombres incorrectos de grupos, por ejemplo el grupo no puede contener un guion -, sin embargo si que puede contener una _)
  75.  
  76. ```
  77. ansible-playbook playbook.yml -i inventory.ini --syntax-check
  78. ```
  79.  
  80. ### Listado de hosts afectados
  81.  
  82. Indica a que nodos va afectar el playbook al lanzarse
  83.  
  84. ```
  85. ansible-playbook playbook.yml -i inventory.ini --list-hosts
  86. ```
  87.  
  88. ### Listado de tareas
  89.  
  90. Informa de las tareas que va a realizar en los hosts afectados
  91.  
  92. ```
  93. ansible-playbook playbook.yml -i inventory.ini --list-tasks
  94. ```
  95.  
  96.  
  97.  
  98. ### Playbook de creacion de usuario
  99.  
  100. [spoiler=Crear usuario ansible mediante root]
  101.  
  102. Playbook de ejemplo, creación de usuario para trabajar con Ansible en los nodos remotos (y en posteriores usos, evitar usar root). En esta conexión se hace uso de root para crearlo. Los siguientes playbooks se harán ya con el usuario indicado. Evitad ponerle de nombre ansible, ya que hay mucho bot por ssh que intenta conectar con Ansible. Aun así, se hace uso de ssh public key, por lo que no lo conseguirían, pero si algún admin por desconocimiento o bien por error le pone password, es una capa mas de seguridad.
  103.  
  104. ```
  105. ---
  106. - name: "Create Ansible User"
  107. hosts: all
  108. remote_user: root
  109. gather_facts: false
  110. vars:
  111. username: my.ansible
  112. group: my.ansible
  113. tasks:
  114. - name: "Create group for ansible user"
  115. group:
  116. name: "{{group}}"
  117. gid: 4009
  118. - name: "Create ansible user"
  119. user:
  120. name: "{{username}}"
  121. comment: "Ansible User"
  122. create_home: yes
  123. state: present
  124. shell: /bin/bash
  125. password: "!!"
  126. uid: 4009
  127. group: "{{group}}"
  128. - name: "Deploy SSH Public Key"
  129. ansible.posix.authorized_key:
  130. user: "{{ username }}"
  131. state: present
  132. key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"
  133. - name: "Set user as sudoer with no passwd"
  134. community.general.sudoers:
  135. name: ansible-sudoer-nopasswd
  136. state: present
  137. user: "{{username}}"
  138. nopassword: true
  139. commands: ALL
  140.  
  141. ```
  142. [/spoiler]
  143.  
  144. En la tarea deploy ssh key, teneis que poner la vuestra y/o la de vuestros compañeros de equipo. Una vez creado el usuario comprobad que podeis conectar con el nuevo usuario con la ssh public key. Lanzando el comando ping
  145.  
  146. ```
  147. ansible -i /ruta/fichero/inventario.ini -m ping all --user my.ansible
  148. ```
  149.  
  150. Debería salir un output en verde indicando algo tal que así
  151.  
  152. ```
  153. hostname | SUCCESS => {
  154. ansible_facts: {
  155. "discovered_interpreter_python: /usr/bin/python3
  156. },
  157. changed: false
  158. ping: pong
  159. }
  160. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement