Ansible est un outil d'automatisation simple qui automatise le déploiement des applications logicielles, le provisionnement du cloud et la gestion de la configuration. Il s'agit d'un outil d'orchestration de serveur qui vous aide à gérer et à contrôler un grand nombre de nœuds de serveur à partir d'emplacements 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 didacticiel, nous allons apprendre à déployer un nouvel utilisateur et à activer l'authentification SSH basée sur une clé à 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.
Prérequis
- 2 serveurs Ubuntu 18.04 ou plus
- 10.0.15.10 machine de contrôle
- 10.0.15.21 ansi01
- 10.0.15.22 ansi02
- Privilèges root
Qu'allons-nous faire ?
- Configurer la machine de contrôle Ansible
- Définir l'utilisateur et la clé SSH
- Créer un fichier d'inventaire
- Créer un manuel Ansible
- Déployer le serveur à l'aide de Playbook
- Test
Étape 1 - Configurer la machine de contrôle Ansible
Dans ce didacticiel, nous utiliserons les serveurs Ubuntu 16.04 en tant qu'hôtes Ansible 'Machine Control' et ansible. La première étape que nous devons faire est de mettre en place 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
Une fois l'installation terminée, nous ajouterons un nouvel utilisateur système.
Nous allons ajouter un nouvel utilisateur nommé "provision" afin d'effectuer le provisionnement du serveur à l'aide d'Ansible.
Ajoutez un nouvel utilisateur 'provision' et donnez un mot de passe à l'utilisateur.
useradd -m -s /bin/bash provision
passwd provision
Ajoutez maintenant l'utilisateur 'provision' pour sudo sans le 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 maintenant il peut utiliser sudo sans mot de passe.
Étape 2 - Définir l'utilisateur et la clé SSH
Dans cette étape, nous définirons l'utilisateur pour les hôtes ansibles. Cet utilisateur sera créé automatiquement 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 chiffrer le mot de passe 'secret01' à l'aide de la commande mkpasswd.
Chiffrez le mot de passe 'secret01' à l'aide de la commande ci-dessous.
mkpasswd --method=SHA-512
TAPEZ LE MOT DE PASSE 'secret01'
Remarque :
Assurez-vous que le package "whois" est installé sur le système, ou vous pouvez l'installer à l'aide de la commande suivante.
sudo apt installer whois -y
Et vous obtiendrez le mot de passe crypté SHA-512.
Ensuite, nous allons générer une nouvelle clé ssh.
Connectez-vous à l'utilisateur 'provision' et générez 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 (située dans le répertoire '.ssh').
Étape 3 - Créer un nouvel inventaire
Dans cette étape, nous définirons les fichiers d'inventaire pour tous les hôtes de serveur.
Connectez-vous en tant qu'utilisateur 'provision' et créez un nouveau répertoire pour le projet.
su - provision
mkdir -p ansible01/
Allez dans le répertoire 'ansible01' et créez un nouveau fichier d'inventaire 'inventory.ini' en utilisant vim.
cd ansible01/
vim inventaire.ini
Collez-y la configuration suivante.
[serveur Web]
ansi01 ansible_host=10.0.15.21
ansi02 ansible_host=10.0.15.22
Enregistrez et quittez.
Créez maintenant un nouveau fichier de configuration ansible 'ansible.cfg'.
vim ansible.cfg
Collez-y la configuration suivante.
[defaults]
inventaire =/home/provision/ansible01/inventory.ini
Enregistrez et quittez.
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
Ansible Playbook est un ensemble d'instructions que vous envoyez pour s'exécuter 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 packages, 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 analyserons toutes les empreintes digitales du serveur à 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'.
Remarque :
Si vous avez beaucoup de nœuds de serveur, vous pouvez enregistrer votre liste d'hôtes, puis analyser 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éez le playbook ansible nommé "deploy-ssh.yml" à l'aide de vim.
vim deploy-ssh.yml
Collez-y la suite du playbook ansible.
---
- hôtes :tous
vars :
- provision_password :'$6$w9S3t7x1kRtmG0u$6nVU9KZsC12Q8DYI4FtgKPy.e/cq/jseB/.DViTO1SpUnoCy.dxjOf8hyfitGq5V0yhgXccx3zlqm2/br /> provision
password={{ provision_password }}
- nom :ajouter l'utilisateur de provision aux sudoers
copie :
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
- nom :Désactiver l'authentification par mot de passe
lineinfile :
dest=/etc/ssh/sshd_config
regexp='^PasswordAuthentication'
line="PasswordAuthentic ation no"
state=present
backup=yes
notifier :
- redémarrer ssh
- nom :Désactiver la connexion root
lineinfile :
dest=/etc/ssh/sshd_config
regexp='^PermitRootLogin'
line="PermitRootLogin no"
state=present
backup=yes
notifier :
- redémarrer ssh
gestionnaires :
- nom :redémarrer ssh
service :
name=sshd
state=restartedEnregistrez et quittez.
Sur le script du playbook :
- nous créons le script de 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é pour le nouvel utilisateur.
- Définissez les faits Ansible sur "non".
- Définissez l'utilisateur "root" en tant qu'utilisateur distant pour effectuer l'automatisation des tâches.
- Nous créons de nouvelles tâches pour ajouter un nouvel utilisateur, ajoutons l'utilisateur aux sudoers et téléchargeons 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 gestionnaire pour redémarrer le service ssh.
Étape 5 - Exécuter le Playbook
Connectez-vous à l'utilisateur 'provision' et accédez au répertoire 'ansible01'.
su - provision
cd ansible01/
Exécutez maintenant le playbook 'deploy-ssh.yml' en utilisant la commande comme indiqué ci-dessous.
ansible-playbook deploy-ssh.yml --ask-pass
Tapez votre mot de passe root et vous obtiendrez le résultat ci-dessous.
Toutes les tâches de déploiement d'un nouvel utilisateur et d'une clé SSH ont été effectuées avec succès.
Étape 6 - Tester
Testez en utilisant la commande ansible.
serveur web ansible -m ping
serveur web ansible -m shell -a id
Vous obtiendrez maintenant les messages verts comme ci-dessous.
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.
Tester la connexion aux serveurs
ssh 10.0.15.21
ssh 10.0.15.22
Et vous serez connecté à chaque serveur en utilisant le fichier de clé par défaut '.ssh/id_rsa' et en utilisant l'utilisateur 'provision'.
Le déploiement d'un nouvel utilisateur et d'une clé ssh à l'aide d'ansible a été effectué avec succès.