GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Configurar nuevo usuario y autenticación de clave SSH. usando Ansible en Ubuntu 18.04

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?

  1. Configurar la máquina de control de Ansible
  2. Definir usuario y clave SSH
  3. Crear archivo de inventario
  4. Crear libro de jugadas de Ansible
  5. Implementar servidor usando Playbook
  6. 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'

Nota:

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'.

Nota:

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.


Ubuntu
  1. Configuración inicial del servidor con Ubuntu 14.04

  2. VPN IPsec basada en StrongSwan usando certificados y clave previamente compartida en Ubuntu 16.04

  3. Cómo usar Ansible para instalar y configurar Redis 6 en Ubuntu 20.04

  4. Uso de Ansible para instalar y configurar Elasticsearch en Ubuntu 20.04

  5. ¿Usando Ubuntu con una configuración de dos pantallas?

Cómo configurar una VPN en Ubuntu

Cómo instalar Ansible en Ubuntu 20.04

Cómo convertirse en usuario raíz en la línea de comandos de Ubuntu usando su y sudo

Configure el inicio de sesión SSH sin contraseña para varios servidores remotos mediante script

¿Cómo configurar la autenticación basada en clave Ssh para Github usando el archivo ~/.ssh/config?

Cómo instalar Ansible en Ubuntu 18.04