====== Initialisation ======
Le prérequis des commandes suivantes sont réalisées sur un poste Linux ou une VM sous Linux qui pilotera les autres serveurs Linux.
La cible est un serveur sous Linux avec \\
le **mot de passe root connu** \\
et un **utilisateur** qui peut se connecter en **SSH** au serveur et dont son **mot de passe** est **connu**. \\
\\
Dans notre exemple, le serveur est **alabourre** et l'utilisateur est **john**.
===== Structure de répertoires =====
**Installer Ansible (sous Ubuntu ou Debian)**
sudo apt install ansible
Aide via ce lien [[https://linuxhint.com/install_ansible_debian10/]]
**Créer un répertoire de travail**
mkdir ansible
Dans ce répertoire, vous aurez tous vos fichiers pour travailler à savoir
drwxrwxr-x 3 user user 4,0K janv. 31 14:38 files
drwxrwxr-x 4 user user 4,0K janv. 31 14:46 inventory
drwxrwxr-x 45 user user 4,0K janv. 31 13:38 roles
**Création des répertoires de fonctionnement**
mkdir files; mkdir inventory; mkdir roles ;
Nous reviendrons dessus un peu plus tard.
===== Fichiers de configuration =====
==== ansible.cfg ====
Tout d'abord le fichier le plus important **ansible.cfg**
vi ansible.cfg
On indique que l'inventaire se situe dans le répertoire "inventory" qui sera dans notre répertoire de travail.
[defaults]
inventory = inventory
===== L'inventaire =====
Il faut créer le fichier d'inventaire pour indiquer à ansible quel est la cible des actions.
Cela est tout à fait arbitraire: cela par OS, par type de service, par lieux, par client, etc.
vi inventory/serveursdebian.yml
[debianhome]
alabourre ansible_host=192.168.1.1
#ontime ansible_host=192.168.1.2
#[debianfma]
#alabourre1 ansible_host=392.568.321.1
#ontime2 ansible_host=392.568.321.2
==== host_vars ====
Variables spécifiques par équipement
vi inventory/host_vars/alabourre.yml
common_admins:
- john
- doe
- erzat
==== group_vars ====
Variables spécifiques par groupe d'équipements (le fameux fichier YML dans inventory)
vi inventory/group_vars/proxmox.yml
common_admins:
- john
- doe
pve_cluster_enabled: false
====== Premier playbook ======
Créer un fichier de type : vi playbook-mes-serveurs.yml
- hosts: proxmox
become: true
roles:
- lae.proxmox
- hosts: all
become: true
name: Base commune pour tous les serveurs
roles:
- common
===== Premier rôle =====
Et oui, le playbook appelle des rôles. Et un rôle appelle des taches (tasks). \\
Dans le répertoire 'roles', on doit créer le rôle **commun** que l'on appelle dans le playbook!
mkdir -p roles/common/tasks/
mkdir -p roles/common/defaults/
vi roles/common/tasks/main.ymkl
====== Automatiser les connexions avec les droits qui vont avec ======
===== Le rôle, les tâches, les tags =====
Attention, il faut configurer la 1er connexion au serveur avant que tout cela fonctionne automatique !
Donc il faut tout d'abord automatiser les actions suivantes :
- installer le package SUDO
- créer le groupe d'utilisateurs qui aura le droit de se connecter sans mot de passe
- configurer un groupe SUDOERS en passwordless (sans mot de passe)
- créer un utilisateur et lui mettre sa clés SSH
**Installation du package SUDO**
- name: Prérequis Package sudo
apt:
name: sudo
state: present
update_cache: true
cache_valid_time: 3600
tags: sudo
**Création du groupe admin SUDO**
- name: Groupe Admin
group:
name: sysadmin
tags: admin
**Mise en place du fichier pour la configuration du passwordless**
- name: sudo passwordless
copy:
content: "%sysadmin ALL=(ALL:ALL) NOPASSWD: ALL"
dest: /etc/sudoers.d/ansible
owner: root
group: root
mode: 0600
tags: sanspwd
**Création des utilisateurs avec le shell bash**
- name: Utilisateurs "admin" à créer
user:
name: "{{ item }}"
state: present
group: "sysadmin"
shell: /bin/bash
loop: "{{ common_admins }}"
tags: users
Les utilisateur ayant le pouvoir du sudo sont à positionner dans le fichier **HOSTAME.yml** (lié au nom décrit dans le fichier inventory/seveursdebian.yml) dans le répertoire inventory/host_vars/ dans notre exemple **inventory/host_vars/alabourre.yml**
Exemple: [[ansible:pourcommencer#host_vars|host_vars/alabourre.yml]]
**Mise en place des clés SSH**
- name: Clés SSH des utilisateurs
authorized_key:
user: "{{ item | basename | splitext | first }}"
key: "{{ lookup('file', item) }}"
when: "item | basename | splitext | first in common_admins"
loop: "{{ lookup('fileglob', 'sshkeys/*.pub', wantlist=True) }}"
tags: sshkeys
\\
Les clés sont à positionner dans le répertoire : files/sshkeys/
- name: Prérequis Package sudo
apt:
name: sudo
state: present
update_cache: true
cache_valid_time: 3600
tags: sudo
- name: Groupe Admin
group:
name: "{{ common_admin_group }}"
tags: admin
- name: sudo passwordless
copy:
content: "%{{ common_admin_group }} ALL=(ALL:ALL) NOPASSWD: ALL"
dest: /etc/sudoers.d/ansible
owner: root
group: root
mode: 0600
tags: sanspwd
- name: Utilisateurs "admin" à créer
user:
name: "{{ item }}"
state: present
group: "{{ common_admin_group }}"
shell: /bin/bash
loop: "{{ common_admins }}"
tags: users
- name: Clés SSH des utilisateurs
authorized_key:
user: "{{ item | basename | splitext | first }}"
key: "{{ lookup('file', item) }}"
when: "item | basename | splitext | first in common_admins"
loop: "{{ lookup('fileglob', 'sshkeys/*.pub', wantlist=True) }}"
tags: keys
===== 1er connexion pour valider le bon fonctionne d'ansible =====
==== Connexion avec un utilisateur ====
Lors de la 1er connexion, il y a un échange des clés qui doit être validé par l'utilisateur.
ssh 192.168.1.1
The authenticity of host '192.168.1.87 (192.168.1.1)' can't be established.
ECDSA key fingerprint is SHA256:NlviiamhX5Y96Xni/TU6rWCJwb6BaRX1Lvq1zNf0934.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.1' (ECDSA) to the list of known hosts.
john@192.168.1.87's password:
==== Création de la clés SSH ====
Si cela n'est pas fait, où un pour un environnement spécifique.
ssh-keygen
Vous pouvez lire et afficher la clé avec la commande suivante :
cat ~/.ssh/id_rsa.pub
Copier la clés dans le répertoire pour déployer la clés SSH via ansible (mettre votre login.pub)
cp ~/.ssh/id_rsa.pub ansible/files/sshkeys/john.pub
==== Copie de la clés SSH pour automatiser la connexion ====
ssh-copy-id john@192.168.1.1
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
john@192.168.1.1's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'john@192.168.1.1'"
and check to make sure that only the key(s) you wanted were added.
Maintenant, vous pouvez vous connecter sans mot de passe à votre serveur.
----
**On va passer l'essentiel !**
Avoir le mot de passe ROOT
Déploiement de la configuration pour automatiser les connexions
Attention, la configuration en SUDO n'est pas encore opérationnel, il faut donc passer en SU ! \\
L'option --become-method=su : Permet de forcer la méthode d'élévation de privilège par défaut SUDO.
L'option -b : Devenir un autre utilisateur avec par défaut l'utilisateur root.
L'option -K : Demande le mot de passe pour l'utilisateur (ici root).
Commande pour passer les "tags" des "tasks" du rôle (pour vérifier/déboguer)
ansible-playbook playbook-mes-serveurs.yml -l alabourre --become-method=su -b -K --tags sudo,admin,sanspwd,users,keys
__Ou toutes les taches/tasks:__
ansible-playbook playbook-mes-serveurs.yml -l alabourre --become-method=su -b -K
Résultat de la commande
BECOME password:
PLAY [conformité ensemble] *****************************************************************************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************************************************************************************
changed: [alabourre]
TASK [common : Prérequis Package sudo] *****************************************************************************************************************************************************
changed: [alabourre]
TASK [common : Groupe Admin] ***************************************************************************************************************************************************************
changed: [alabourre]
TASK [common : sudo passwordless] **********************************************************************************************************************************************************
changed: [alabourre]
TASK [common : Utilisateurs "admin" à créer] ***********************************************************************************************************************************************
changed: [alabourre] => (item=john)
TASK [common : Clés SSH des utilisateurs] **************************************************************************************************************************************************
changed: [alabourre] => (item=/pwd/ansible/files/sshkeys/john.pub)
PLAY RECAP *********************************************************************************************************************************************************************************
alabourre : ok=0 changed=8 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
**Maintenant, vous pouvez passer directement vos commandes avec votre utilisateur et sans mot de passe**
ansible-playbook playbook-mes-serveurs.yml -l alabourre
PLAY [conformité ensemble] *****************************************************************************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************************************************************************************
ok: [alabourre]
TASK [common : Prérequis Package sudo] *****************************************************************************************************************************************************
ok: [alabourre]
TASK [common : Groupe Admin] ***************************************************************************************************************************************************************
ok: [alabourre]
TASK [common : sudo passwordless] **********************************************************************************************************************************************************
ok: [alabourre]
TASK [common : Utilisateurs "admin" à créer] ***********************************************************************************************************************************************
ok: [alabourre] => (item=john)
TASK [common : Clés SSH des utilisateurs] **************************************************************************************************************************************************
ok: [alabourre] => (item=/pwd/ansible/files/sshkeys/john.pub)
PLAY RECAP *********************************************************************************************************************************************************************************
alabourre : ok=8 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Maintenant, nous pouvons passer la suite à savoir le déploiement de configurations, packages pour un serveur ou un ensemble de serveurs. Dans le cadre d'ansible, nous réalisons des mises en conformité, à savoir l'on écrase ou l'on impose le référentiel qui est dans ansible.
[[ansible:lasuite|ansible:lasuite]]