Attention: Cette partie est a reproduire sur tous les client et le serveur ansible
Vérifier la connexion réseau
ip -c a
Editer la config réseau (si besoin)
nano /etc/network/interfaces
Redémarrer le réseau et activer la carte si DOWN
systemctl restart networking.service ; sudo ifup ens33
Commenter la ligne cd-rom suite a l'installation
nano /etc/apt/sources.list
Si carte DOWN
nmcli device connect ens160
Configurer le réseau
nmtui
Changer le nom de la machine (si besoin)
nano /etc/hosts hostnamectl set-hostname srv-ansible
Création des utilisateurs sur le system
adduser ansible
Changer le password des utilisateurs sur le system
passwd ansible
Attention: Cette partie est a réaliser uniquement sur les clients (ICI une Debian il faudra donc adapter pour un autre OS)
Mettre a jour le cache et installer sudo
apt update apt install sudo
Editer le fichier /etc/sudoers
visudo
Ajout de la ligne :
ansible ALL=(ALL:ALL) NOPASSWD: ALL
Editer le fichier ssh_config
sudo nano /etc/ssh/ssh_config
Ajouter cela ici 10.102.200.111 est IP du serveur ANSIBLE
Match User ansible AllowUsers [email protected] PasswordAuthentication no
Redémarrer le serveur SSH
sudo systemctl restart ssh
Attention: Cette partie est a réaliser uniquement sur le serveur ansible
Cas spécial transforme https en http
sed -i 's/https/http/g' /etc/yum.repos.d/*
Installation
dnf install epel-release-el8 -y dnf install ansible -y
Cas spécial re-transformer https en http
sed -i 's/https/http/g' /etc/yum.repos.d/*
ssh-keygen -o -a 100 -t ed25519 -C "ansible@srv-ansible" ssh-copy-id [email protected] ssh-copy-id [email protected] ssh-copy-id [email protected]
Création d'un espace dépôt des fichier de config
cd /srv/ansible/projet1
Création du fichier d'inventaire
touch inventaire.yml
Modification du fichier d'inventaire
nano inventaire.yml
all:
vars:
ansible_python_interpreter: /bin/python3
children:
deb_master:
hosts:
10.102.200.153:
deb_slave:
hosts:
10.102.200.80:
ansible-inventory all -i inventaire.yml --graph
Test d'un envoi de PING sur tous les inventaire du fichier “inventaire.yml”
ansible all -i inventaire.yml -m ping
Note:
nano Playbook_[Action]_[Paquet].yml
--- - hosts: all become: yes # Permet de s'assurer que les tâches sont exécutées avec les privilèges sudo tasks: - name: Update the APT package list apt: update_cache: yes - name: [Nom de la tache 2] apt: name: [Nom du paquet a installer] state: present - name: [Nom de la tache 3] systemd: name: [Nom du paquet a démarrer et activer au démarrage] state: started enabled: yes
ansible [Nom-Groupe] -i [Nom-Fichier-Inventaire].yml -m [Commande (Ex : ping)]
ansible all -i [Fichier-Inventaire].yml -m apt -a "name=[Paquet] state=[Indique_Status_dans_lequel_le-paquet_doit_etre]" -b
ansible-playbook -i [Nom-Fichier-Inventaire].yml [Nom-Fichier-Playbook].yml -l [Nom-Groupe]
Vérifier la syntax du Playbook
ansible-playbook -i [Nom-Fichier-Inventaire].yml [Nom-Fichier-Playbook].yml --syntax-check
Vérifier ce que la commande donnerait pour TOUS ou le groupe [Nom-Groupe (Ex: deb_master) ] seulement
ansible-playbook -i [Nom-Fichier-Inventaire].yml [Nom-Fichier-Playbook].yml -C -l all
ou
ansible-playbook -i [Nom-Fichier-Inventaire].yml [Nom-Fichier-Playbook].yml -C -l [Nom-Groupe]
Ping du Groupe deb_master ce trouvant dans le fichier inventaire inventaire.yml
ansible deb_master -i inventaire.yml -m ping
Suppression du paquet nano sur toute les machines du fichier inventaire inventaire.yml
ansible all -i inventaire.yml -m apt -a "name=nano state=absent" -b
Installation du paquet vim sur toute les machines du fichier inventaire inventaire.yml
ansible all -i inventaire.yml -m apt -a "name=vim state=present" -b
Création d'un Playbook
nano Playbook_Install_Apache2.yml
Note:
--- - hosts: all become: yes # Permet de s'assurer que les tâches sont exécutées avec les privilèges sudo tasks: - name: Update the APT package list apt: update_cache: yes - name: Install Apache apt: name: apache2 state: present - name: Ensure Apache is started and enabled systemd: name: apache2 state: started enabled: yes
Exécution des actions du Playbook Playbook_Install_Apache2.yml qui va effectuer l'installation et l'activation du paquet Apache2 sur le groupe deb_master uniquement du fichier inventaire inventaire.yml
ansible-playbook -i inventaire.yml Playbook_Install_Apache2.yml -l deb_master
ansible deb_master -m apt -a "update_cache=yes" -b ansible deb_master -m apt -a "name=apache2 state=present" -b ansible deb_master -m service -a "name=apache2 state=started enabled=yes" -b
--- - name: Playbook pour sécuriser SSH et installer BIND hosts: all become: yes tasks: - name: Assurer que le service SSH est installé apt: name: openssh-server state: present update_cache: yes - name: Ajouter un bloc de configuration SSH dans /etc/ssh/sshd_config ansible.builtin.blockinfile: path: /etc/ssh/sshd_config backup: true insertafter: EOF block: | # Configuration personnalisée SSH Match User ansible AllowUsers ansible@10.102.200.111 PasswordAuthentication no marker: "# {mark} Configuration SSH" #owner: root #group: root #mode: '0600' notify: - Restart SSH - name: Installer le service BIND apt: name: bind9 state: present update_cache: yes - name: Neutraliser la connexion via un accès console de l’utilisateur ansible user: name: ansible password: "!" handlers: - name: Restart SSH service: name: ssh state: restarted
ou alors la meme chose avec un playbook plus simpliste
--- - name: Playbook pour sécuriser SSH et installer BIND v2 hosts: all become: true tasks: # Secure SSH : - name: sec ssh blockinfile: path: /etc/ssh/sshd_config state: present backup: yes insertafter: "EOF" block: | Match User ansible AllowUsers ansible@10.102.200.111 PasswordAuthentication no - name: restart ssh service: name: sshd state: restarted # Disable login with password : - name: disable login password user: name: ansible password: "!" # Install Bind sur les deux serveur : - name: Install Bind apt: update_cache: yes name: bind9 state: present
Vérifier la syntax du Playbook
ansible-playbook -i inventaire.yml Playbook_Multi_SSH-Config.yml --syntax-check
Vérifier ce que la commande donnerait pour TOUS ou le groupe deb_master seulement ansible-playbook -i inventaire.yml Playbook_Multi_SSH-Config.yml -C -l all ou
ansible-playbook -i inventaire.yml Playbook_Multi_SSH-Config.yml -C -l deb_master
Lance l'exécution de la commande
ansible-playbook -i inventaire.yml Playbook_Multi_SSH-Config.yml -l all
Question: