fabric - Exécuter des commandes shell à distance via SSH sous Linux
Dans le monde en constante évolution du développement de logiciels, une gestion efficace des serveurs à distance est cruciale. Que vous soyez un administrateur système, un ingénieur logiciel ou un développeur de logiciels, être capable d’exécuter des commandes Linux sur des serveurs distants est une tâche courante.
C’est là que Fabric, une bibliothèque Python de haut niveau conçue pour exécuter des commandes Linux à distance via SSH, en fait un outil indispensable pour tous ceux qui ont besoin de gérer des systèmes distants tout en tirant parti de la puissance de Python.
Qu’est-ce que le tissu ?
Fabric est une bibliothèque Python polyvalente qui simplifie le processus d’exécution de commandes shell sur des serveurs distants via des connexions SSH. Il a été initialement développé par Jeff Forcier et est ensuite devenu un projet open-source.
Il fournit une interface pythonique de haut niveau pour travailler avec des systèmes distants, ce qui vous permet d’automatiser des tâches, de déployer du code et de gérer des configurations sur plusieurs serveurs sans effort.
Pourquoi utiliser du tissu ?
Il existe plusieurs raisons convaincantes de choisir Fabric pour vos besoins d’exécution de commandes à distance :
- Approche pythonique – Fabric adhère à la philosophie de Python, ce qui permet aux développeurs et aux administrateurs système d’écrire facilement des scripts dans un langage qu’ils connaissent déjà.
- SSH et Paramiko – Fabric s’appuie sur la bibliothèque Paramiko pour gérer les connexions SSH, qui fournit un moyen sûr et fiable d’exécuter des commandes à distance.
- Flux de travail basé sur les tâches – Fabric encourage une approche axée sur les tâches pour l’exécution des commandes à distance. Vous définissez des tâches, qui sont essentiellement des fonctions Python, et Fabric se charge de les exécuter sur des serveurs distants.
- Cas d’utilisation – Fabric est un outil polyvalent adapté à un large éventail de cas d’utilisation, notamment le déploiement d’applications, la gestion des configurations de serveur et l’exécution de tâches de maintenance du système.
Dans ce guide, nous allons aborder les étapes d’introduction et de prise en main de l’utilisation de Fabric pour améliorer l’administration des serveurs pour des groupes de serveurs.
Comment installer l’outil d’automatisation de la structure sous Linux
Une caractéristique importante de la structure est que les machines distantes que vous devez administrer n’ont besoin que du serveur OpenSSH standard installé.
Vous n’avez besoin que de certaines exigences installées sur le serveur à partir duquel vous administrez les serveurs distants avant de pouvoir commencer.
Exigences:
- Python 2.5+ avec les en-têtes de développement
- Python-setuptools et pip (facultatif, mais préféré) gcc
Fabric s’installe facilement à l’aide du gestionnaire de paquets pip, mais vous pouvez également choisir votre gestionnaire de paquets par défaut yum, dnf ou apt/apt-get pour installer le paquet de fabric, généralement appelé fabric ou python-fabric.
Installer Fabric dans les systèmes RHEL
Sur les distributions basées sur RHEL telles que CentOS Stream, Rocky Linux et AlmaLinux, le référentiel EPEL doit être installé et activé sur le système pour installer le package de structure.
sudo dnf install epel-release
sudo dnf install fabric
Installer Fabric dans les systèmes Debian
Sur les distributions basées sur Debian telles que Ubuntu et Linux Mint, les utilisateurs peuvent simplement faire apt pour installer le paquet de fabric comme indiqué :
sudo apt install fabric
Installer Fabric à l’aide de PiP
Si fabric n’est pas disponible à partir des référentiels de votre système, vous pouvez utiliser pip pour l’installer comme indiqué.
sudo yum install python3-pip [On RedHat based systems]
sudo dnf install python3-pip [On Fedora 22+ versions]
sudo apt install python3-pip [On Debian based systems]
Une fois pip installé avec succès, vous pouvez utiliser pip pour récupérer la dernière version du fabric comme indiqué :
pip3 install fabric
Comment utiliser Fabric pour automatiser les tâches d’administration de Linux
Commençons par l’utilisation de Fabric. Dans le cadre du processus d'installation, un script Python appelé 'fab'
a été ajouté à un répertoire dans le PATH de votre système. Le script 'fab'
gère toutes les tâches lors de l'utilisation de Fabric.
Exécuter des commandes Linux localement
Par convention, vous devez commencer par créer un fichier Python appelé fabfile.py à l’aide de votre éditeur de
texte préféré. N’oubliez pas que vous pouvez donner à ce fichier un nom différent comme vous le souhaitez, mais vous devrez spécifier le chemin d’accès au fichier comme suit :
fab --fabfile /path/to/the/file.py
Fabric utilise 'fabfile.py'
pour exécuter les tâches, le 'fabfile'
doit se trouver dans le même répertoire où vous exécutez l'outil Fabric.
style="color : #c33 ;">Exemple 1 : Créons d’abord un Hello World
de base.
# vi fabfile.py
Ajoutez ces lignes de code au fichier.
def hello():
print('Hello world, Tecmint community')
Enregistrez le fichier et exécutez la commande ci-dessous.
# fab hello
Voyons maintenant un exemple de fabfile.py pour exécuter la commande uptime sur la machine locale.
style="color : #c33 ;">Exemple 2 : Ouvrez un nouveau fichier fabfile.py comme suit :
# vi fabfile.py
Et collez les lignes de code suivantes dans le fichier.
#! /usr/bin/env python
from fabric.api import local
def uptime():
local('uptime')
Enregistrez ensuite le fichier et exécutez la commande suivante :
# fab uptime
Exécuter des commandes Linux à distance via SSH
L’API FABRIC utilise un dictionnaire de configuration qui est l’équivalent en Python d’un tableau associatif connu sous le nom d’env
, qui stocke des valeurs qui contrôlent ce que fait Fabric.
Le fichier env.hosts
est une liste de serveurs sur lesquels vous souhaitez exécuter des tâches Fabric. Si votre réseau est 192.168.0.0 et que vous souhaitez gérer les hôtes 192.168.0.2 et 192.168.0.6 avec votre fabfile, vous pouvez configurer le env.hosts comme suit :
#!/usr/bin/env python
from fabric.api import env
env.hosts = [ '192.168.0.2', '192.168.0.6' ]
La ligne de code ci-dessus spécifie uniquement les hôtes sur lesquels vous allez exécuter des tâches Fabric, mais sans rien faire de plus. Par conséquent, vous pouvez définir certaines tâches, Fabric fournit un ensemble de fonctions que vous pouvez utiliser pour interagir avec vos machines distantes.
Bien qu’il existe de nombreuses fonctions, les plus couramment utilisées sont :
- run : qui exécute une commande shell sur une machine distante.
- local – qui exécute la commande sur l’ordinateur local.
- sudo – qui exécute une commande shell sur une machine distante, avec les privilèges root.
- Obtenir – qui télécharge un ou plusieurs fichiers à partir d’une machine distante.
- Put – qui télécharge un ou plusieurs fichiers sur une machine distante.
style="color : #c33 ;">Exemple 3 : Pour faire écho à un message sur plusieurs machines, créez un fabfile.py
tel que celui ci-dessous.
#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def echo():
run("echo -n 'Hello, you are tuned to Tecmint ' ")
Pour exécuter les tâches, exécutez la commande suivante :
# fab echo
style="color : #c33 ;">Exemple 4 : Vous pouvez améliorer le fabfile.py
que vous avez créé précédemment pour exécuter la commande uptime sur la machine locale afin qu’elle exécute la commande uptime et vérifie également l’utilisation du disque à l’aide de la commande df sur plusieurs machines comme suit :
#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def uptime():
run('uptime')
def disk_space():
run('df -h')
Enregistrez le fichier et exécutez la commande suivante :
# fab uptime
fab disk_space
Installation automatique de la pile LAMP sur un serveur Linux distant
style="color : #c33 ;">Exemple 4 : Prenons un exemple de déploiement d’un serveur LAMP (Linux, Apache, MySQL/MariaDB et PHP) sur un serveur Linux distant.
Nous allons écrire une fonction qui permettra d’installer LAMP à distance en utilisant les privilèges root.
Pour RHEL/CentOS et Fedora
#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def deploy_lamp():
run ("yum install -y httpd mariadb-server php php-mysql")
Pour Debian/Ubuntu et Linux Mint
#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def deploy_lamp():
sudo("apt-get install -q apache2 mysql-server libapache2-mod-php php-mysql")
Enregistrez le fichier et exécutez la commande suivante :
# fab deploy_lamp
style="color : red ;">Remarque : En raison de la grande sortie, nous ne pouvons pas créer de screencast (gif animé) pour cet exemple.
Vous pouvez désormais automatiser les tâches de gestion de serveur Linux à l’aide de Fabric et de ses fonctionnalités et des exemples donnés ci-dessus...
Options utiles du tissu
- Vous pouvez exécuter
fab --help
pour afficher des informations utiles et une longue liste d’options de ligne de commande disponibles. - Une option importante
--fabfile=PATH
qui vous aide à spécifier un fichier de module Python différent defabfile.py
à importer. - Pour spécifier un nom d’utilisateur à utiliser lors de la connexion à des hôtes distants, utilisez l’option
--user=USER
. - Pour utiliser un mot de passe pour l’authentification et/ou le sudo, utilisez l’option
--password=MOT DE PASSE
. - Pour afficher des informations détaillées sur la commande NAME, utilisez l’option
--display=NAME
. - Pour afficher les formats, utilisez l’option
--list
, choix : court, normal, imbriqué, utilisez l’option--list-format=FORMAT
. - Pour afficher une liste de commandes possibles et quitter, incluez l’option
--list
. - Vous pouvez spécifier l’emplacement du fichier de configuration à utiliser à l’aide de l’option
--config=PATH
. - Pour afficher une sortie d’erreur colorée, utilisez
--colorize-errors
. - Pour afficher le numéro de version du programme et le quitter, utilisez l’option
--version
.
Résumé
Fabric est une puissante bibliothèque Python qui rationalise l’exécution des commandes à distance via SSH, offrant une approche Pythonic conviviale. Sa capacité à simplifier des tâches complexes et à automatiser la gestion du système en fait un outil précieux pour les administrateurs système, les développeurs et les professionnels du DevOps.
Que vous gériez un seul serveur ou que vous orchestriez un déploiement à grande échelle, Fabric peut vous aider à accomplir votre travail de manière efficace et efficiente.