Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Ansible
- ## Instalación de ansible
- Para debian 11 se ha de ejecutar los siguientes comandos
- ```
- apt update
- apt-get install -y gnupg2 curl wget sshpass python3 python3-pip
- pip install ansible
- python --version
- ```
- Si no está python (-v2) instalado, podeis instalar tambien
- ```
- apt install -y python-is-python3
- ```
- Y luego algunos plugins que facilitan a la hora de trabajar con playbooks
- ```
- ansible-galaxy collection install community.general
- ```
- ## Inventario
- 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.
- ```
- miserver1 ansible_host=94.15.24.21 ansible_ssh_port=22
- miserver2 ansible_host=94.15.24.22 ansible_ssh_port=22
- ```
- 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
- ```
- miserver1 ansible_host=94.15.24.21 ansible_ssh_port=22
- miserver2 ansible_host=94.15.24.22 ansible_ssh_port=22
- [web_servers]
- miwebserver1 ansible_host=94.15.24.23 ansible_ssh_port=22
- miwebserver2 ansible_host=94.15.24.24 ansible_ssh_port=22
- ```
- En el playbook se podrá indicar que se lance contra ese grupo.
- 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 ..
- ```
- [web_servers]
- miwebserver[1:50].midominio.com ansible_ssh_port=22
- ```
- A la hora de ejecutar el playbook, ansible ya se encargará de iterar por los 50 nodos.
- ## Conectando con los clientes
- 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
- ```
- ansible -i /ruta/fichero/inventario.ini -m ping all --ssh-common-args='-o StrictHostKeyChecking=no --ask-pass
- ```
- 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.
- La idea es crear posteriormente un usuario que use ssh key para conectar y trabajar.
- # Trabajar con Playbooks
- ### Comprobar syntaxis
- 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 _)
- ```
- ansible-playbook playbook.yml -i inventory.ini --syntax-check
- ```
- ### Listado de hosts afectados
- Indica a que nodos va afectar el playbook al lanzarse
- ```
- ansible-playbook playbook.yml -i inventory.ini --list-hosts
- ```
- ### Listado de tareas
- Informa de las tareas que va a realizar en los hosts afectados
- ```
- ansible-playbook playbook.yml -i inventory.ini --list-tasks
- ```
- ### Playbook de creacion de usuario
- [spoiler=Crear usuario ansible mediante root]
- 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.
- ```
- ---
- - name: "Create Ansible User"
- hosts: all
- remote_user: root
- gather_facts: false
- vars:
- username: my.ansible
- group: my.ansible
- tasks:
- - name: "Create group for ansible user"
- group:
- name: "{{group}}"
- gid: 4009
- - name: "Create ansible user"
- user:
- name: "{{username}}"
- comment: "Ansible User"
- create_home: yes
- state: present
- shell: /bin/bash
- password: "!!"
- uid: 4009
- group: "{{group}}"
- - name: "Deploy SSH Public Key"
- ansible.posix.authorized_key:
- user: "{{ username }}"
- state: present
- key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}"
- - name: "Set user as sudoer with no passwd"
- community.general.sudoers:
- name: ansible-sudoer-nopasswd
- state: present
- user: "{{username}}"
- nopassword: true
- commands: ALL
- ```
- [/spoiler]
- 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
- ```
- ansible -i /ruta/fichero/inventario.ini -m ping all --user my.ansible
- ```
- Debería salir un output en verde indicando algo tal que así
- ```
- hostname | SUCCESS => {
- ansible_facts: {
- "discovered_interpreter_python: /usr/bin/python3
- },
- changed: false
- ping: pong
- }
- ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement