Ansible es una herramienta de automatización simple que automatiza la implementación de aplicaciones de software, el aprovisionamiento en la nube y la gestión de la configuración. Es una herramienta de orquestación de servidores que lo ayuda a administrar y controlar una gran cantidad de nodos de servidores desde lugares únicos llamados 'Máquinas de control'. Ansible fue creado por Michael DeHaan en 2012 y está escrito en Python y Powershell.
En este tutorial, aprenderemos cómo implementar un nuevo usuario y habilitar la autenticación basada en clave SSH utilizando la herramienta de automatización Ansible. También aprenderemos a configurar la 'Máquina de control' de Ansible, así como a escribir un libro de jugadas simple de Ansible.
Requisitos
- 2 o más servidores Ubuntu 18.04
- 10.0.15.10 máquina de control
- 10.0.15.21 ansi01
- 10.0.15.22 ansi02
- Privilegios de raíz
¿Qué haremos?
- Configurar la máquina de control de Ansible
- Definir usuario y clave SSH
- Crear archivo de inventario
- Crear libro de jugadas de Ansible
- Implementar servidor usando Playbook
- Pruebas
Paso 1:configurar la máquina de control Ansible
En este tutorial, usaremos los servidores Ubuntu 16.04 como el 'Control de la máquina' de Ansible y los hosts de ansible. El primer paso que debemos hacer es configurar la 'máquina de control'.
Instalaremos python y ansible en la 'máquina de control' de ansible ejecutando el siguiente comando.
sudo apt install python ansible -y
Una vez completada la instalación, agregaremos un nuevo usuario del sistema.
Agregaremos un nuevo usuario llamado 'provisión' para realizar el aprovisionamiento del servidor usando Ansible.
Agregue una nueva 'provisión' de usuario y proporcione una contraseña al usuario.
useradd -m -s /bin/bash provision
passwd provision
Ahora agregue el usuario 'provision' para sudo sin la contraseña creando un nuevo archivo de configuración en '/etc/sudoers.d/' usando el siguiente comando.
echo -e 'provision\tALL=(ALL)\tNOPASSWD:\tALL' > /etc/sudoers.d/provision
Se ha creado un nuevo usuario y ahora puede usar sudo sin contraseña.
Paso 2:Definir usuario y clave SSH
En este paso, definiremos el usuario para hosts ansible. Ansible creará automáticamente este usuario, por lo que solo debemos definir el nombre de usuario, la contraseña y la clave pública ssh.
Para cada servidor ('ansi01' y 'ansi02'), crearemos un nuevo usuario llamado 'provision' con contraseña 'secret01'. Y necesitamos encriptar la contraseña 'secret01' usando el comando mkpasswd.
Cifre la contraseña 'secret01' usando el siguiente comando.
mkpasswd --method=SHA-512
TYPE THE PASSWORD 'secret01'
Asegúrese de que el paquete 'whois' esté instalado en el sistema, o puede instalarlo usando el siguiente comando.
sudo apt install whois -y
Y obtendrá la contraseña cifrada SHA-512.
A continuación, generaremos una nueva clave ssh.
Inicie sesión en el usuario 'provisión' y genere la clave ssh usando el comando ssh-keygen.
su - provision
ssh-keygen -t rsa
Ahora se han definido el usuario y la contraseña, y se ha creado la clave ssh (ubicada en el directorio '.ssh').
Paso 3 - Crear nuevo inventario
En este paso, definiremos los archivos de inventario para todos los servidores.
Inicie sesión como usuario de 'provisión' y cree un nuevo directorio para el proyecto.
su - provision
mkdir -p ansible01/
Vaya al directorio 'ansible01' y cree un nuevo archivo de inventario 'inventory.ini' usando vim.
cd ansible01/
vim inventory.ini
Pegue la siguiente configuración allí.
[webserver]
ansi01 ansible_host=10.0.15.21
ansi02 ansible_host=10.0.15.22
Guardar y salir.
Ahora cree un nuevo archivo de configuración de ansible 'ansible.cfg'.
vim ansible.cfg
Pegue la siguiente configuración allí.
[defaults]
inventory = /home/provision/ansible01/inventory.ini
Guardar y salir.
Se ha creado el archivo de inventario ansible y nuestros scripts ansible se ubicarán bajo el usuario 'provisión', dentro del directorio 'ansible01'.
Paso 4:crear un libro de jugadas de Ansible
Ansible Playbook es un conjunto de instrucciones que envía para que se ejecuten en un solo servidor o en un grupo de servidores. Representa el aprovisionamiento de ansible, donde la automatización se define como tareas, y todos los trabajos, como la instalación de paquetes y la edición de archivos, serán realizados por módulos de ansible.
En este paso, crearemos un nuevo libro de jugadas de ansible para implementar un nuevo usuario, implementar la clave ssh y configurar el servicio ssh.
Antes de crear un nuevo libro de jugadas ansible, escanearemos todas las huellas dactilares del servidor usando el comando ssh-keyscan como se muestra a continuación.
ssh-keyscan 10.0.15.21 >> ~/.ssh/known_hosts
ssh-keyscan 10.0.15.22 >> ~/.ssh/known_hosts
La huella digital de esos servidores se almacenará en el archivo '.ssh/known_hosts'.
Si tiene muchos nodos de servidor, puede guardar su lista de hosts y luego escanear manualmente la huella digital de la clave ssh usando el script bash como se muestra a continuación.
for i in $(cat list-hosts.txt)
do
ssh-keyscan $i >> ~/.ssh/known_hosts
done
A continuación, cree el libro de jugadas de ansible llamado 'deploy-ssh.yml' usando vim.
vim deploy-ssh.yml
Pegue siguiendo el libro de jugadas ansible allí.
---
- hosts: all
vars:
- provision_password: '$6$w9S3t7x1kRtmG0u$6nVU9KZsC12Q8DYI4FtgKPy.e/cq/jseB/.DViTO1SpUnoCy.dxcOf8hyfitGq5V0yhgXccxzlqm2o.I3SlDJ0'
gather_facts: no
remote_user: root
tasks:
- name: Add a new user named provision
user:
name=provision
password={{ provision_password }}
- name: Add provision user to the sudoers
copy:
dest: "/etc/sudoers.d/provision"
content: "provision ALL=(ALL) NOPASSWD: ALL"
- name: Deploy SSH Key
authorized_key: user=provision
key="{{ lookup('file', '/home/provision/.ssh/id_rsa.pub') }}"
state=present
- name: Disable Password Authentication
lineinfile:
dest=/etc/ssh/sshd_config
regexp='^PasswordAuthentication'
line="PasswordAuthentication no"
state=present
backup=yes
notify:
- restart ssh
- name: Disable Root Login
lineinfile:
dest=/etc/ssh/sshd_config
regexp='^PermitRootLogin'
line="PermitRootLogin no"
state=present
backup=yes
notify:
- restart ssh
handlers:
- name: restart ssh
service:
name=sshd
state=restarted
Guardar y salir.
En el guión del libro de jugadas:
- creamos la secuencia de comandos del libro de jugadas 'deploy-ssh.yml' para que se aplique en todos los servidores definidos en el archivo 'inventory.ini'.
- creamos la variable ansible 'provision_password', que contiene la contraseña cifrada para el nuevo usuario.
- Establezca los hechos de Ansible en 'no'.
- Defina el usuario 'raíz' como un usuario remoto para realizar tareas de automatización.
- Creamos nuevas tareas para agregar un nuevo usuario, agregamos el usuario a los sudoers y cargamos la clave ssh.
- Creamos nuevas tareas para configurar los servicios ssh, deshabilitar el inicio de sesión raíz y deshabilitar la autenticación de contraseña. Las tareas para configurar el ssh activarán los controladores 'reiniciar ssh'.
- Creamos un controlador para reiniciar el servicio ssh.
Paso 5:ejecutar el libro de jugadas
Inicie sesión en el usuario 'provisión' y vaya al directorio 'ansible01'.
su - provision
cd ansible01/
Ahora ejecute el libro de jugadas 'deploy-ssh.yml' usando el comando como se muestra a continuación.
ansible-playbook deploy-ssh.yml --ask-pass
Escriba su contraseña de root y obtendrá el resultado que se muestra a continuación.
Todas las tareas para implementar un nuevo usuario y clave ssh se han completado con éxito.
Paso 6 - Prueba
Pruebe usando el comando ansible.
ansible webserver -m ping
ansible webserver -m shell -a id
Ahora obtendrá los mensajes verdes como se muestra a continuación.
Ahora podemos administrar esos servidores 'ansi01' y 'ansi02' usando Ansible, y el usuario 'provisión' será el usuario predeterminado para Ansible.
Probando la conexión a los servidores
ssh 10.0.15.21
ssh 10.0.15.22
Y se conectará a cada servidor usando el archivo de clave predeterminado '.ssh/id_rsa' y usando la 'provisión' del usuario.
La implementación de un nuevo usuario y una clave ssh con ansible se completó con éxito.