Configurer un nouvel utilisateur et une authentification par clé SSH à l’aide d’Ansible sur Ubuntu 18.04

Ansible est un outil d’automatisation simple qui permet d’automatiser le déploiement d’applications logicielles, le provisionnement du cloud et la gestion de la configuration. C’est un outil d’orchestration de serveurs qui t’aide à gérer et à contrôler un grand nombre de nœuds de serveurs à partir d’endroits uniques appelés  » Machines de contrôle « . Ansible a été créé par Michael DeHaan en 2012 et est écrit en Python et Powershell.

Dans ce tutoriel, nous allons apprendre à déployer un nouvel utilisateur et à activer l’authentification basée sur une clé SSH à l’aide de l’outil d’automatisation Ansible. Nous apprendrons également à configurer la  » machine de contrôle  » Ansible, ainsi qu’à écrire un playbook Ansible simple.

Conditions préalables

  • 2 serveurs Ubuntu 18.04 ou plus
    • 10.0.15.10 control-machine
    • 10.0.15.21 ansi01
    • 10.0.15.22 ansi02
  • Privilèges de racine

Ce que nous allons faire ?

  1. Configurer la machine de contrôle Ansible
  2. Définir l’utilisateur et la clé SSH
  3. Créer un fichier d’inventaire
  4. Créer un Playbook Ansible
  5. Déployer le serveur à l’aide du Playbook
  6. Tester

Étape 1 – Configurer la machine de contrôle Ansible

Dans ce tutoriel, nous utiliserons les serveurs Ubuntu 16.04 comme « machine de contrôle » Ansible et hôtes Ansible. La première étape à suivre est de configurer la « machine de contrôle ».

Nous allons installer python et ansible sur la ‘machine de contrôle’ ansible en exécutant la commande suivante.

sudo apt install python ansible -y

Configurer la machine de contrôle Ansible

Une fois l’installation terminée, nous ajouterons un nouvel utilisateur système.

Nous ajouterons un nouvel utilisateur nommé ‘provision’ afin d’effectuer le provisionnement du serveur à l’aide d’Ansible.

Ajoute le nouvel utilisateur ‘provision’ et donne-lui un mot de passe.

useradd -m -s /bin/bash provision
passwd provision

Ajoute maintenant l’utilisateur ‘provision’ pour sudo sans mot de passe en créant un nouveau fichier de configuration sous ‘/etc/sudoers.d/’ à l’aide de la commande ci-dessous.

echo  -e 'provision\tALL=(ALL)\tNOPASSWD:\tALL' > /etc/sudoers.d/provision

Un nouvel utilisateur a été créé et il peut maintenant utiliser sudo sans mot de passe.

Ajouter un utilisateur

Étape 2 – Définir l’utilisateur et la clé SSH

Dans cette étape, nous allons définir l’utilisateur pour les hôtes ansible. Cet utilisateur sera automatiquement créé par ansible, il nous suffit donc de définir le nom d’utilisateur, le mot de passe et la clé publique ssh.

Pour chaque serveur (‘ansi01’ et ‘ansi02’), nous allons créer un nouvel utilisateur nommé ‘provision’ avec le mot de passe ‘secret01’. Et nous devons crypter le mot de passe ‘secret01’ à l’aide de la commande mkpasswd.

Crypte le mot de passe ‘secret01’ à l’aide de la commande ci-dessous.

mkpasswd --method=SHA-512
TYPE THE PASSWORD 'secret01'

Remarque :

Assure-toi que le paquet ‘whois’ est installé sur le système, ou tu peux l’installer à l’aide de la commande suivante.

sudo apt install whois -y

Et tu obtiendras le mot de passe crypté SHA-512.

Définir l'utilisateur et la clé SSH

Ensuite, nous allons générer une nouvelle clé ssh-key.

Connecte-toi à l’utilisateur ‘provision’ et génère la clé ssh à l’aide de la commande ssh-keygen.

su - provision
ssh-keygen -t rsa

Maintenant, l’utilisateur et le mot de passe ont été définis, et la clé ssh a été créée (elle se trouve dans le répertoire ‘.ssh’).

L'utilisateur et le mot de passe ont été définis

Étape 3 – Créer un nouvel inventaire

Dans cette étape, nous allons définir les fichiers d’inventaire pour tous les hôtes du serveur.

Connecte-toi en tant qu’utilisateur ‘provision’ et crée un nouveau répertoire pour le projet.

su - provision
mkdir -p ansible01/

Va dans le répertoire ‘ansible01’ et crée un nouveau fichier d’inventaire ‘inventory.ini’ en utilisant vim.

cd ansible01/
vim inventory.ini

Colle-y la configuration suivante.

[webserver]
ansi01 ansible_host=10.0.15.21
ansi02 ansible_host=10.0.15.22

Sauvegarde et quitte.

Crée maintenant un nouveau fichier de configuration ansible ‘ansible.cfg’.

vim ansible.cfg

Colle la configuration suivante dans ce fichier.

[defaults]
inventory = /home/provision/ansible01/inventory.ini

Sauvegarde et quitte.

Créer un nouvel inventaire

Le fichier d’inventaire ansible a été créé et nos scripts ansible seront situés sous l’utilisateur ‘provision’, dans le répertoire ‘ansible01’.

Étape 4 – Créer un Playbook Ansible

Le Playbook Ansible est un ensemble d’instructions que tu envoies pour qu’elles soient exécutées sur un seul ou un groupe d’hôtes de serveur. Il représente le provisionnement ansible, où l’automatisation est définie comme des tâches, et tous les travaux comme l’installation de paquets, l’édition de fichiers, seront effectués par des modules ansible.

Dans cette étape, nous allons créer un nouveau playbook ansible pour déployer un nouvel utilisateur, déployer la clé ssh et configurer le service ssh.

Avant de créer un nouveau playbook ansible, nous allons scanner l’empreinte digitale de tous les serveurs à l’aide de la commande ssh-keyscan comme ci-dessous.

ssh-keyscan 10.0.15.21 >> ~/.ssh/known_hosts
ssh-keyscan 10.0.15.22 >> ~/.ssh/known_hosts

L’empreinte digitale de ces serveurs sera stockée dans le fichier ‘.ssh/known_hosts’.

Créer un Playbook Ansible

Remarque :

Si tu as beaucoup de nœuds de serveur, tu peux enregistrer ta liste d’hôtes, puis scanner manuellement l’empreinte de la clé ssh à l’aide du script bash comme indiqué ci-dessous.

for i in $(cat list-hosts.txt)
do
ssh-keyscan $i >> ~/.ssh/known_hosts
done

Ensuite, crée le playbook ansible nommé ‘deploy-ssh.yml’ en utilisant vim.

vim deploy-ssh.yml

Colle-y le playbook ansible suivant.

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

Sauvegarde et quitte.

Sur le script du playbook :

  • nous créons le script du playbook ‘deploy-ssh.yml’ à appliquer sur tous les serveurs définis dans le fichier ‘inventory.ini’.
  • nous créons la variable ansible ‘provision_password’, contenant le mot de passe crypté du nouvel utilisateur.
  • Définis les faits Ansible sur ‘no’.
  • Définis l’utilisateur ‘root’ comme un utilisateur distant pour effectuer l’automatisation des tâches.
  • Nous créons de nouvelles tâches pour ajouter un nouvel utilisateur, ajouter l’utilisateur aux sudoers, et télécharger la clé ssh.
  • Nous créons de nouvelles tâches pour configurer les services ssh, désactiver la connexion root et désactiver l’authentification par mot de passe. Les tâches de configuration de ssh déclencheront les gestionnaires ‘restart ssh’.
  • Nous créons un handler pour redémarrer le service ssh.

Étape 5 – Exécute le Playbook

Connecte-toi à l’utilisateur ‘provision’ et va dans le répertoire ‘ansible01’.

su - provision
cd ansible01/

Exécute maintenant le playbook ‘deploy-ssh.yml’ à l’aide de la commande indiquée ci-dessous.

ansible-playbook deploy-ssh.yml --ask-pass

Tape ton mot de passe root, et tu obtiendras le résultat ci-dessous.

Exécute le Playbook

Toutes les tâches pour déployer un nouvel utilisateur et une clé ssh ont été effectuées avec succès.

Étape 6 – Test

Teste en utilisant la commande ansible.

ansible webserver -m ping
ansible webserver -m shell -a id

Tu obtiendras maintenant les messages verts comme ci-dessous.

Tester Ansible

Nous pouvons maintenant gérer ces serveurs ‘ansi01’ et ‘ansi02’ à l’aide d’Ansible, et l’utilisateur ‘provision’ sera l’utilisateur par défaut pour Ansible.

Test de la connexion aux serveurs

ssh 10.0.15.21
ssh 10.0.15.22

Tu seras connecté à chaque serveur en utilisant la clé par défaut du fichier ‘.ssh/id_rsa’ et en utilisant l’utilisateur ‘provision’.

Teste la connexion au serveur

Un autre test

Le déploiement du nouvel utilisateur et de la clé ssh à l’aide d’Ansible a été effectué avec succès.

Référence

Vous aimerez aussi...