Ansible est un outil de gestion de configuration gratuit, open-source et l'un des plus populaires. Il s'agit d'un outil multiplateforme qui simplifie le cloud computing, la gestion de la configuration, l'installation des packages et la configuration des services. Il utilise un fichier YAML qui contient les étapes que l'utilisateur souhaite exécuter sur une machine particulière. Avec Ansible, vous pouvez configurer et gérer plus d'hôtes avec une seule commande. Ansible est une alternative aux autres outils de gestion de configuration comme Chef et Puppet.
Dans cet article, je vais vous montrer comment installer et utiliser l'outil de gestion de configuration Ansible sur Debian 11.
Prérequis
- Trois serveurs exécutant Debian 11.
- Un mot de passe root est configuré sur chaque serveur.
Pour les besoins de ce didacticiel, nous utiliserons la configuration suivante :
- Contrôleur Ansible - 192.168.10.9
- Hôtes Ansibles - 192.168.10.10, 192.168.10.11
Installer Ansible sur Debian 11
Par défaut, le paquet Ansible n'est pas inclus dans le dépôt par défaut de Debian. Il existe deux façons d'installer Ansible sur Debian 11.
- Utilisation de la commande APT
- Utiliser la commande PIP
Installer Ansible avec APT
Tout d'abord, vous devrez installer certaines dépendances dans votre système. Vous pouvez installer les dépendances requises à l'aide de la commande suivante :
apt-get install gnupg2 curl wget -y
Une fois toutes les dépendances installées, éditez le source.list d'APT et ajoutez le dépôt Ansible :
nano /etc/apt/sources.list
Ajoutez la ligne suivante :
deb http://ppa.launchpad.net/ansible/ansible/ubuntu focal main
Enregistrez et fermez le fichier lorsque vous avez terminé, puis ajoutez la clé Ansible GPG à l'aide de la commande suivante :
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367
Vous devriez voir le résultat suivant :
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)). Executing: /tmp/apt-key-gpghome.lFEjztT9TY/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 gpg: key 93C4A3FD7BB9C367: public key "Launchpad PPA for Ansible, Inc." imported gpg: Total number processed: 1 gpg: imported: 1
Maintenant, mettez à jour le référentiel et installez Ansible avec la commande suivante :
apt-get update
apt-get install ansible -y
Une fois Ansible installé, vérifiez la version d'Ansible avec la commande suivante :
ansible --version
Vous devriez obtenir le résultat suivant :
ansible 2.10.8 config file = None configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3/dist-packages/ansible executable location = /usr/bin/ansible python version = 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110]
Installer Ansible avec PIP
Tout d'abord, vous devrez installer Python et PIP sur votre système. Vous pouvez l'installer à l'aide de la commande suivante :
apt-get install python3 python3-pip -y
Une fois l'installation terminée, utilisez la commande pip pour installer Ansible comme indiqué ci-dessous :
pip install ansible
Installer sshpass
Le sshpass est un outil de ligne de commande qui vous permet de fournir des mots de passe avec des commandes SSH. Ici, nous allons utiliser sshpass sur le nœud du contrôleur Ansible avec Ansible pour authentifier un hôte distant.
Vous pouvez installer le sshpass avec la commande suivante :
apt-get install sshpass -y
Ensuite, connectez-vous au premier hôte distant ansible pour ajouter une empreinte SSH à vos known_hosts fichier :
ssh [email protected]
Il vous sera demandé de fournir un mot de passe SSH comme indiqué ci-dessous :
The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established. ECDSA key fingerprint is SHA256:q3zMoJ6qdjYvAdL7/w4Z0gm0ZEgGOB+rNIPKEMdYS6o. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.10.10' (ECDSA) to the list of known hosts. Password:
Fournissez votre mot de passe et appuyez sur Entrée pour ajouter une empreinte SSH.
Ensuite, connectez-vous au deuxième hôte distant ansible pour ajouter une empreinte SSH à votre fichier known_hosts :
ssh [email protected]
Il vous sera demandé de fournir un mot de passe SSH comme indiqué ci-dessous :
The authenticity of host '192.168.10.11 (192.168.10.11)' can't be established. ECDSA key fingerprint is SHA256:q3zMoJ6qdjYvAdL7/w4Z0gm0ZEgGOB+rNIPKEMdYS6o. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.10.11' (ECDSA) to the list of known hosts. Password:
Indiquez votre mot de passe et appuyez sur Entrée .
Vous pouvez désormais utiliser la commande sshpass pour vérifier la connexion SSH :
sshpass -p yourpassword ssh [email protected]
Créer un fichier d'inventaire d'hôtes Ansible
Ensuite, vous devrez créer un fichier d'inventaire pour définir l'adresse IP, le nom d'utilisateur, le mot de passe et le port SSH de vos hôtes distants :
nano ~/.hosts
Ajoutez les lignes suivantes :
[servers] server1 ansible_host=192.168.10.10 ansible_user=root ansible_ssh_pass=password ansible_ssh_port=22 server2 ansible_host=192.168.10.11 ansible_user=root ansible_ssh_pass=password ansible_ssh_port=22
Enregistrez et fermez le fichier.
Remarque :Dans le fichier ci-dessus, nous utiliserons l'adresse IP, le nom d'utilisateur, le mot de passe et le port SSH des hôtes distants.
Travailler avec Ansible
Ansible fournit de nombreux modules qui vous aident à gérer les hôtes distants.
La syntaxe de base pour exécuter Ansible comme indiqué ci-dessous :
ansible -i [inventory_file] -m [module] [host]
Vérifions la connectivité ping à tous les hôtes :
ansible -i ~/.hosts -m ping all
Si tout va bien, vous devriez obtenir le résultat suivant :
server2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } server1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }
Si vous souhaitez vérifier la connectivité ping du seul serveur1, exécutez la commande suivante :
ansible -i ~/.hosts -m ping server1
Vous devriez obtenir le résultat suivant :
server1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }
Vous pouvez utiliser le module shell pour exécuter toutes les commandes sur les hôtes distants.
Par exemple, pour exécuter "free -m " sur le serveur2, exécutez la commande suivante :
ansible -i ~/.hosts -m shell -a "free -m" server2
Vous devriez voir le résultat suivant :
server2 | CHANGED | rc=0 >> total used free shared buff/cache available Mem: 1982 128 491 2 1363 1669 Swap: 0 0 0
Pour exécuter un "df -h " commad sur le serveur2, exécutez la commande suivante :
ansible -i ~/.hosts -m shell -a "df -h" server2
Vous devriez obtenir le résultat suivant :
server2 | CHANGED | rc=0 >> Filesystem Size Used Avail Use% Mounted on udev 976M 0 976M 0% /dev tmpfs 199M 404K 198M 1% /run /dev/sda1 50G 2.4G 45G 5% / tmpfs 992M 124K 992M 1% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 199M 0 199M 0% /run/user/0
Ansible fournit un module apt pour installer n'importe quel paquet sur les hôtes distants.
Pour installer le Nginx package sur le serveur1, exécutez la commande suivante :
ansible -i ~/.hosts -m ansible.builtin.apt -a "name=nginx state=present" server1
Vous devriez obtenir le résultat suivant :
server1 | CHANGED => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "cache_update_time": 1631424599, "cache_updated": false, "changed": true, "stderr": "", "stderr_lines": [], "Upgrading binary: nginx.", "Setting up nginx (1.18.0-6.1) ...", "Processing triggers for man-db (2.9.4-2) ...", "Processing triggers for libc-bin (2.31-13) ..." ] }
Pour vérifier l'état du service Nginx sur le serveur1, exécutez la commande suivante :
ansible -i ~/.hosts -m shell -a "systemctl status nginx" server1
Vous devriez obtenir le résultat suivant :
server1 | CHANGED | rc=0 >> ? nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2021-09-12 05:55:36 UTC; 49s ago Docs: man:nginx(8) Process: 10761 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 10764 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 10871 (nginx) Tasks: 2 (limit: 2341) Memory: 5.8M CPU: 54ms CGroup: /system.slice/nginx.service ??10871 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ??10874 nginx: worker process Sep 12 05:55:36 ansible systemd[1]: Starting A high performance web server and a reverse proxy server... Sep 12 05:55:36 ansible systemd[1]: nginx.service: Failed to parse PID from file /run/nginx.pid: Invalid argument Sep 12 05:55:36 ansible systemd[1]: Started A high performance web server and a reverse proxy server.
Ansible fournit un module utilisateur pour créer et gérer des utilisateurs sur les hôtes distants.
Pour créer un nouvel utilisateur nommé user1 sur le serveur1, exécutez la commande suivante :
ansible -i ~/.hosts -m ansible.builtin.user -a "name=user1 password=yourpassword" server1
Vous devriez voir le résultat suivant :
server1 | CHANGED => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": true, "comment": "", "create_home": true, "group": 1000, "home": "/home/user1", "name": "user1", "password": "NOT_LOGGING_PASSWORD", "shell": "/bin/sh", "state": "present", "system": false, "uid": 1000 }
Conclusion
Dans cet article, vous avez appris à installer Ansible avec APT et PIP. Vous avez également appris à utiliser différents modules Ansible pour gérer des hôtes distants. J'espère que vous avez maintenant une compréhension suffisante d'Ansible. N'hésitez pas à me demander si vous avez des questions.