Búsqueda de sitios web

Fabric: ejecute comandos de Shell de forma remota a través de SSH en Linux


En el siempre cambiante mundo del desarrollo de software, la gestión eficiente del servidor remoto es crucial. Ya sea administrador de sistemas, ingeniero de software o desarrollador de software, poder ejecutar comandos de Linux en servidores remotos es una tarea común.

Aquí es donde Fabric, una biblioteca Python de alto nivel diseñada para ejecutar comandos de Linux de forma remota a través de SSH, la convierte en una herramienta indispensable para cualquiera que necesite administrar sistemas remotos mientras aprovechando el poder de Python.

¿Qué es la tela?

Fabric es una biblioteca Python versátil que simplifica el proceso de ejecución de comandos de shell en servidores remotos a través de conexiones SSH. Fue desarrollado inicialmente por Jeff Forcier y luego se convirtió en un proyecto de código abierto.

Proporciona una interfaz Pythonic de alto nivel para trabajar con sistemas remotos, lo que le permite automatizar tareas, implementar código y administrar configuraciones en múltiples servidores sin esfuerzo.

¿Por qué utilizar tela?

Hay varias razones de peso para elegir Fabric para sus necesidades de ejecución remota de comandos:

  • Enfoque Python: 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 remota de comandos. Usted 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 presentar y comenzar a usar Fabric para mejorar la administración de servidores para grupos de servidores.

Cómo instalar la herramienta Fabric Automation en Linux

Una característica importante de fabric es que las máquinas remotas que necesitas administrar sólo necesitan tener instalado el servidor OpenSSH estándar.

Solo necesita ciertos requisitos instalados en el servidor desde el cual administra los servidores remotos antes de poder comenzar.

Requisitos:

  • Python 2.5+ con los encabezados de desarrollo
  • Python-setuptools y pip (opcional, pero preferido) gcc

Fabric se instala fácilmente usando el administrador de paquetes pip, pero es posible que también prefieras elegir tu administrador de paquetes predeterminado yum, dnf o apt/apt-get para instalar el paquete fabric. , normalmente llamado tela o tela de pitón.

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 Instale 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 mostrado:

sudo apt install fabric

Instalar tela 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 última versión de fabric como se muestra:

pip3 install fabric

Cómo utilizar Fabric para automatizar las tareas de administración de Linux

Comencemos con cómo usar Fabric. Como parte del proceso de instalación, se agregó un script de Python llamado 'fab' a un directorio en la RUTA de su sistema. El script 'fab' maneja todas las tareas cuando se usa Fabric.

Ejecute comandos de Linux localmente

Por convención, debes comenzar creando un archivo Python llamado fabfile.py usando tu editor de texto favorito. Recuerde que puede darle a este archivo el nombre diferente que desee, pero deberá especificar la ruta del archivo de la siguiente manera:

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

Fabric usa 'fabfile.py' para ejecutar tareas, el 'fabfile' debe estar ubicado en el mismo directorio donde ejecuta Herramienta Tela.

Ejemplo 1: primero creemos un Hello World básico.

vi fabfile.py

Agregue estas líneas de código al archivo.

def hello():
       print('Hello world, Tecmint community')

Guarde el archivo y ejecute el siguiente comando.

fab hello

Veamos ahora un ejemplo de un fabfile.py para ejecutar el comando uptime en la máquina local.

Ejemplo 2: Abra un nuevo archivo fabfile.py de la siguiente manera:

vi fabfile.py

Y pegue las siguientes líneas de código en el archivo.

#!  /usr/bin/env python
from fabric.api import local
def uptime():
  local('uptime')

Luego guarde el archivo y ejecute el siguiente comando:

fab uptime

Ejecute 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 en Python de una matriz asociativa conocida como env, que almacena valores que controlan lo que hace Fabric.

env.hosts es una lista de servidores en los que desea ejecutar tareas Fabric. Si su red es 192.168.0.0 y desea administrar los hosts 192.168.0.2 y 192.168.0.6 con su fabfile , puede configurar 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á las tareas de Fabric, pero no hará nada más. Por lo tanto, puede definir algunas tareas. Fabric proporciona un conjunto de funciones que puede utilizar para interactuar con sus máquinas remotas.

Aunque existen muchas funciones, las más utilizadas son:

  • ejecutar: ejecuta un comando de shell en una máquina remota.
  • local: ejecuta el comando en la máquina local.
  • sudo: ejecuta un comando de shell en una máquina remota, con privilegios de root.
  • Obtener: descarga uno o más archivos desde una máquina remota.
  • Put: carga uno o más archivos en una máquina remota.

Ejemplo 3: Para repetir un mensaje en varias máquinas, cree 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, ejecute el siguiente comando:

fab echo

Ejemplo 4: Puede mejorar el fabfile.py que creó anteriormente para ejecutar el comando uptime en la máquina local para que ejecuta el comando uptime y también verifica el uso del disco usando el comando df en varias 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')

Guarde el archivo y ejecute el siguiente comando:

fab uptime
fab disk_space

Instale automáticamente LAMP Stack en un servidor Linux remoto

Ejemplo 4: Veamos un ejemplo de implementación de un servidor LAMP (Linux, Apache, MySQL/MariaDB y PHP) en un servidor Linux remoto.

Escribiremos una función que permitirá 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")

Guarde el archivo y ejecute el siguiente comando:

fab deploy_lamp

Nota: debido al gran tamaño del resultado, no podemos crear un screencast (gif animado) para este ejemplo.

Ahora puede automatizar las tareas de administración del servidor Linux utilizando Fabric y sus características y ejemplos mencionados anteriormente...

Opciones útiles de tela

  • Puede ejecutar fab --help para ver información útil y una larga lista de opciones de línea de comando disponibles.
  • Una opción importante --fabfile=PATH que le ayuda a especificar un archivo de módulo de Python diferente para importar que no sea fabfile.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 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 formatos use la opción --list, opciones: corto, normal, anidado, use la opción --list-format=FORMAT.
  • Para imprimir una lista de posibles comandos y salir, incluya la opción --list.
  • Puede especificar la ubicación del archivo de configuración a utilizar 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, utilice la opción --version.
Resumen

Fabric es una potente biblioteca de Python que agiliza la ejecución remota de comandos a través de SSH, proporcionando un enfoque Pythonic fácil de usar. Su capacidad para simplificar tareas complejas y automatizar la gestión de sistemas la convierte en una herramienta valiosa para administradores de sistemas, desarrolladores y profesionales de DevOps.

Ya sea que esté administrando un único servidor u organizando una implementación a gran escala, Fabric puede ayudarlo a realizar el trabajo de manera eficiente y efectiva.