Recherche de site Web

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 administrateur système, ingénieur logiciel ou développeur de logiciels, pouvoir 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 quiconque a besoin de gérer des systèmes distants tout en tirer 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, vous permettant 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 impérieuses de choisir Fabric pour vos besoins d'exécution de commandes à distance :

  • Approche Python : 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, ce qui fournit un moyen sécurisé et fiable d'exécuter des commandes à distance.
  • Workflow basé sur les tâches – Fabric encourage une approche orientée 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 aborderons les étapes à suivre pour introduire et démarrer l'utilisation de Fabric afin d'améliorer l'administration des serveurs pour des groupes de serveurs.

Comment installer l'outil d'automatisation de Fabric sous Linux

Une caractéristique importante de fabric 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 packages pip, mais vous pouvez également préférer choisir votre gestionnaire de packages par défaut yum, dnf ou apt/apt-get pour installer le package fabric. , généralement appelé tissu 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 installez le package fabric.

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 utiliser apt pour installer le paquet fabric comme montré:

sudo apt install fabric

Installer Fabric à l'aide de PiP

Si fabric n'est pas disponible dans les 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 de fabric comme indiqué :

pip3 install fabric

Comment utiliser Fabric pour automatiser les tâches d'administration Linux

Commençons par découvrir comment utiliser Fabric. Dans le cadre du processus d'installation, un script Python appelé 'fab' a été ajouté à un répertoire du 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 à votre guise, mais vous devrez spécifier le chemin du fichier comme suit :

fab --fabfile /path/to/the/file.py

Fabric utilise 'fabfile.py' pour exécuter des tâches, le 'fabfile' doit être situé dans le même répertoire où vous exécutez le Outil de tissu.

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

Regardons maintenant un exemple de fabfile.py pour exécuter la commande uptime sur la machine locale.

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écutez des commandes Linux à distance via SSH

L'API Fabric utilise un dictionnaire de configuration qui est l'équivalent Python d'un tableau associatif appelé env, qui stocke les valeurs qui contrôlent ce que fait Fabric.

Le 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 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 exécuterez des tâches Fabric, mais ne ferez rien de plus. Vous pouvez donc 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 la machine locale.
  • 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.

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

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

Installer automatiquement la pile LAMP sur un serveur Linux distant

Exemple 4 : Regardons 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

Remarque : En raison du volume de sortie important, 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 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 à importer autre que fabfile.py.
  • 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 sudo, utilisez l'option --password=PASSWORD.
  • Pour imprimer 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 imprimer une liste des commandes possibles et quitter, incluez l'option --list.
  • Vous pouvez spécifier l'emplacement du fichier de configuration à utiliser en utilisant 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 quitter, utilisez l'option --version.
Résumé

Fabric est une puissante bibliothèque Python qui rationalise l'exécution de commandes à distance via SSH, offrant une approche Pythonique 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 DevOps.

Que vous gériez un seul serveur ou orchestrez un déploiement à grande échelle, Fabric peut vous aider à accomplir votre travail de manière efficace et efficiente.