En el mundo siempre cambiante del desarrollo de software, la gestión eficiente de servidores remotos es crucial. Ya sea que seas un administrador de sistemas, un ingeniero de software o un desarrollador de software, poder ejecutar comandos de Linux en servidores remotos es una tarea común.
Aquí es donde Fabric, una biblioteca de alto nivel de Python diseñada para ejecutar comandos de Linux de forma remota a través de SSH, se convierte en una herramienta indispensable para cualquiera que necesite gestionar sistemas remotos aprovechando el poder de Python.
¿Qué es Fabric?
Fabric es una versátil biblioteca de Python que simplifica el proceso de ejecutar comandos de shell en servidores remotos a través de conexiones SSH. Fue desarrollada inicialmente por Jeff Forcier y más tarde se convirtió en un proyecto de código abierto.
Proporciona una interfaz de alto nivel y pythonica para trabajar con sistemas remotos, permitiéndote automatizar tareas, implementar código y gestionar configuraciones en varios servidores sin esfuerzo.
¿Por qué usar Fabric?
Hay varias razones convincentes para elegir Fabric para tus necesidades de ejecución de comandos remotos:
- Enfoque Pythonico – Fabric se adhiere a la filosofía de Python, lo que facilita a los desarrolladores y administradores de sistemas escribir scripts en un lenguaje con el que ya están familiarizados.
- SSH y Paramiko – Fabric se basa en la biblioteca Paramiko para manejar conexiones SSH, lo que proporciona una forma segura y confiable de ejecutar comandos de forma remota.
- Flujo de trabajo basado en tareas – Fabric fomenta un enfoque orientado a tareas para la ejecución de comandos remotos. Define tareas, que son esencialmente funciones de Python, y Fabric se encarga de ejecutarlas en servidores remotos.
- Casos de uso – Fabric es una herramienta versátil adecuada para una amplia gama de casos de uso, incluida la implementación de aplicaciones, la gestión de configuraciones de servidores y la ejecución de tareas de mantenimiento del sistema.
En esta guía, cubriremos los pasos para introducir y comenzar a usar Fabric para mejorar la administración de servidores para grupos de servidores.
Cómo instalar la herramienta de automatización Fabric en Linux
Una característica importante de fabric es que las máquinas remotas que necesitas administrar solo necesitan tener instalado el servidor estándar OpenSSH.
Solo necesitas ciertos requisitos instalados en el servidor desde el cual estás administrando los servidores remotos antes de que puedas comenzar.
Requisitos:
- Python 2.5+ con los encabezados de desarrollo
- Python-setuptools y pip (opcional, pero preferido) gcc
Fabric se instala fácilmente utilizando el gestor de paquetes pip, pero también puedes preferir elegir tu gestor de paquetes predeterminado yum, dnf, o apt/apt-get para instalar el paquete fabric, generalmente llamado fabric o python-fabric.
Instalar Fabric en Sistemas RHEL
En distribuciones basadas en RHEL como CentOS Stream, Rocky Linux y AlmaLinux, debe tener el repositorio EPEL instalado y habilitado en el sistema para instalar el paquete fabric.
sudo dnf install epel-release sudo dnf install fabric
Instalar Fabric en Sistemas Debian
En distribuciones basadas en Debian como Ubuntu y Linux Mint, los usuarios pueden simplemente hacer apt para instalar el paquete fabric como se muestra:
sudo apt install fabric
Instalar Fabric Usando PiP
Si fabric no está disponible en los repositorios de su sistema, puede usar pip para instalarlo como se muestra.
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]
Una vez que pip se haya instalado correctamente, puede usar pip para obtener la versión más reciente de fabric como se muestra:
pip3 install fabric
Cómo usar Fabric para automatizar tareas de administración de Linux
Comencemos a aprender cómo usar Fabric. Como parte del proceso de instalación, se ha agregado un script de Python llamado 'fab'
a un directorio en el PATH de su sistema. El script 'fab'
maneja todas las tareas al usar Fabric.
Ejecutar Comandos de Linux Localmente
Por convención, debes comenzar creando un archivo de Python llamado fabfile.py
usando tu editor de texto favorito. Recuerda que puedes darle un nombre diferente a este archivo si lo deseas, pero necesitarás especificar la ruta del archivo de la siguiente manera:
fab --fabfile /path/to/the/file.py
Fabric utiliza 'fabfile.py'
para ejecutar tareas, el 'fabfile'
debe estar ubicado en el mismo directorio donde ejecutas la herramienta Fabric.
Ejemplo 1: Vamos a crear un Hola Mundo
básico primero.
# vi fabfile.py
Agrega estas líneas de código al archivo.
def hello(): print('Hello world, Tecmint community')
Guarda el archivo y ejecuta el comando a continuación.
# fab hello

Veamos ahora un ejemplo de un fabfile.py para ejecutar el comando uptime en la máquina local.
Ejemplo 2: Abre un nuevo archivo fabfile.py de la siguiente manera:
# vi fabfile.py
Y pega las siguientes líneas de código en el archivo.
#! /usr/bin/env python from fabric.api import local def uptime(): local('uptime')
Luego guarda el archivo y ejecuta el siguiente comando:
# fab uptime

Ejecutar Comandos de Linux de Forma Remota a Través de SSH
La API de Fabric utiliza un diccionario de configuración que es el equivalente de Python de una matriz asociativa conocida como env
, que almacena valores que controlan lo que Fabric hace.
El env.hosts
es una lista de servidores en los que deseas ejecutar tareas de Fabric. Si tu red es 192.168.0.0 y deseas administrar hosts 192.168.0.2 y 192.168.0.6 con tu fabfile, puedes configurar el env.hosts de la siguiente manera:
#!/usr/bin/env python from fabric.api import env env.hosts = [ '192.168.0.2', '192.168.0.6' ]
La línea de código anterior solo especifica los hosts en los que ejecutarás tareas de Fabric pero no hace nada más. Por lo tanto, puedes definir algunas tareas, Fabric proporciona un conjunto de funciones que puedes usar para interactuar con tus máquinas remotas.
Aunque hay muchas funciones, las más comúnmente utilizadas son:
- run – que ejecuta un comando de shell en una máquina remota.
- local – que ejecuta el comando en la máquina local.
- sudo – que ejecuta un comando de shell en una máquina remota, con privilegios de root.
- Get – que descarga uno o más archivos de una máquina remota.
- Put – que sube uno o más archivos a una máquina remota.
Ejemplo 3: Para mostrar un mensaje en múltiples máquinas, crea un fabfile.py
como el siguiente.
#!/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 ' ")
Para ejecutar las tareas, ejecuta el siguiente comando:
# fab echo

Ejemplo 4: Puedes mejorar el fabfile.py
que creaste anteriormente para ejecutar el comando de uptime en la máquina local de modo que ejecute el comando uptime y también verifique el uso del disco utilizando el comando df en múltiples máquinas de la siguiente manera:
#!/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')
Guarda el archivo y ejecuta el siguiente comando:
# fab uptime # fab disk_space

Instalar automáticamente la pila LAMP en el servidor Linux remoto
Ejemplo 4: Veamos un ejemplo de implementación de un LAMP (Linux, Apache, MySQL/MariaDB y PHP) en un servidor Linux remoto.
Escribiremos una función que permita instalar LAMP de forma remota utilizando privilegios de root.
Para RHEL/CentOS y 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")
Para Debian/Ubuntu y 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")
Guarda el archivo y ejecuta el siguiente comando:
# fab deploy_lamp
Nota: Debido a la gran cantidad de salida, no podemos crear una grabación en pantalla (gif animado) para este ejemplo.
Ahora puedes automatizar tareas de administración de servidores Linux utilizando Fabric y sus características y ejemplos mencionados anteriormente…
Opciones útiles de Fabric
- Puede ejecutar
fab --help
para ver información útil y una larga lista de opciones disponibles en la línea de comandos. - Una opción importante
--fabfile=PATH
que le ayuda a especificar un archivo de módulo Python diferente para importar que no seafabfile.py
. - Para especificar un nombre de usuario para usar al conectarse a hosts remotos, use la opción
--user=USER
. - Para usar una contraseña para la autenticación y/o sudo, use la opción
--password=PASSWORD
. - Para imprimir información detallada sobre el comando NOMBRE, use la opción
--display=NAME
. - Para ver los formatos, use la opción
--list
, opciones: corto, normal, anidado, use la opción--list-format=FORMAT
. - Para imprimir una lista de comandos posibles y salir, incluya la opción
--list
. - Puede especificar la ubicación del archivo de configuración a usar utilizando la opción
--config=PATH
. - Para mostrar una salida de error en color, use
--colorize-errors
. - Para ver el número de versión del programa y salir, use la opción
--version
.
Resumen
Fabric es una poderosa biblioteca de Python que simplifica la ejecución de comandos remotos a través de SSH, proporcionando un enfoque amigable para el usuario en Python. Su capacidad para simplificar tareas complejas y automatizar la administración de sistemas lo convierte en una herramienta valiosa para administradores de sistemas, desarrolladores y profesionales de DevOps.
Ya sea que estés administrando un solo servidor o orquestando una implementación a gran escala, Fabric puede ayudarte a hacerlo de manera eficiente y efectiva.
Source:
https://www.tecmint.com/automating-linux-system-administration-tasks/