Fabric - Execute comandos Shell remotamente por SSH no Linux
No mundo em constante mudança do desenvolvimento de software, o gerenciamento remoto eficiente de servidores é crucial. Quer você seja um administrador de sistema, um engenheiro de software ou um desenvolvedor de software, ser capaz de executar comandos do Linux em servidores remotos é uma tarefa comum.
É aqui que o Fabric, uma biblioteca Python de alto nível projetada para executar comandos Linux remotamente via SSH, a torna uma ferramenta indispensável para quem precisa gerenciar sistemas remotos enquanto aproveitando o poder do Python.
O que é tecido?
Fabric é uma biblioteca Python versátil que simplifica o processo de execução de comandos shell em servidores remotos por meio de conexões SSH. Foi inicialmente desenvolvido por Jeff Forcier e mais tarde tornou-se um projeto de código aberto.
Ele fornece uma interface Pythonic de alto nível para trabalhar com sistemas remotos, permitindo automatizar tarefas, implantar código e gerenciar configurações em vários servidores sem esforço.
Por que usar tecido?
Existem vários motivos convincentes para escolher o Fabric para suas necessidades de execução remota de comandos:
- Abordagem Python – Fabric adere à filosofia do Python, tornando mais fácil para desenvolvedores e administradores de sistema escrever scripts em uma linguagem com a qual já estão familiarizados.
- SSH e Paramiko – O Fabric depende da biblioteca Paramiko para lidar com conexões SSH, que fornece uma maneira segura e confiável de executar comandos remotamente.
- Fluxo de trabalho baseado em tarefas – O Fabric incentiva uma abordagem orientada a tarefas para execução remota de comandos. Você define tarefas, que são essencialmente funções Python, e o Fabric se encarrega de executá-las em servidores remotos.
- Casos de uso – Fabric é uma ferramenta versátil adequada para uma ampla variedade de casos de uso, incluindo implantação de aplicativos, gerenciamento de configurações de servidor e execução de tarefas de manutenção de sistema.
Neste guia, abordaremos as etapas para apresentar e começar a usar o Fabric para aprimorar a administração de servidores para grupos de servidores.
Como instalar a ferramenta Fabric Automation no Linux
Uma característica importante do fabric é que as máquinas remotas que você precisa administrar só precisam ter o servidor OpenSSH padrão instalado.
Você só precisa de determinados requisitos instalados no servidor a partir do qual está administrando os servidores remotos antes de começar.
Requisitos:
- Python 2.5+ com os cabeçalhos de desenvolvimento
- Python-setuptools e pip (opcional, mas preferido) gcc
Fabric é facilmente instalado usando o gerenciador de pacotes pip, mas você também pode preferir escolher seu gerenciador de pacotes padrão yum, dnf ou apt/apt-get para instalar o pacote fabric , normalmente chamado de fabric ou python-fabric.
Instale o Fabric em sistemas RHEL
Em distribuições baseadas em RHEL, como CentOS Stream, Rocky Linux e AlmaLinux, você deve ter o repositório EPEL instalado e habilitado no sistema para instale o pacote fabric.
sudo dnf install epel-release
sudo dnf install fabric
Instale o Fabric em sistemas Debian
Em distribuições baseadas em Debian, como Ubuntu e Linux Mint, os usuários podem simplesmente fazer o apt para instalar o pacote fabric como mostrando:
sudo apt install fabric
Instale o Fabric usando PiP
Se o fabric não estiver disponível nos repositórios do seu sistema, você pode usar o pip para instalá-lo conforme mostrado.
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]
Depois que o pip for instalado com sucesso, você poderá usar pip para obter a versão mais recente do fabric conforme mostrado:
pip3 install fabric
Como usar o Fabric para automatizar tarefas de administração do Linux
Vamos começar a usar o Fabric. Como parte do processo de instalação, um script Python chamado 'fab'
foi adicionado a um diretório no PATH do seu sistema. O script 'fab'
cuida de todas as tarefas ao usar o Fabric.
Execute comandos do Linux localmente
Por convenção, você precisa começar criando um arquivo Python chamado fabfile.py
usando seu editor de texto favorito. Lembre-se de que você pode dar a este arquivo um nome diferente conforme desejar, mas precisará especificar o caminho do arquivo da seguinte forma:
fab --fabfile /path/to/the/file.py
Fabric usa 'fabfile.py'
para executar tarefas, o 'fabfile'
deve estar localizado no mesmo diretório onde você executa o Ferramenta de tecido.
Exemplo 1: Vamos criar um Hello World
básico primeiro.
vi fabfile.py
Adicione essas linhas de código ao arquivo.
def hello():
print('Hello world, Tecmint community')
Salve o arquivo e execute o comando abaixo.
fab hello
Vejamos agora um exemplo de fabfile.py para executar o comando uptime na máquina local.
Exemplo 2: Abra um novo arquivo fabfile.py da seguinte maneira:
vi fabfile.py
E cole as seguintes linhas de código no arquivo.
#! /usr/bin/env python
from fabric.api import local
def uptime():
local('uptime')
Em seguida, salve o arquivo e execute o seguinte comando:
fab uptime
Execute comandos do Linux remotamente por SSH
A API Fabric usa um dicionário de configuração que é equivalente em Python a um array associativo conhecido como env
, que armazena valores que controlam o que o Fabric faz.
O env.hosts
é uma lista de servidores nos quais você deseja executar tarefas do Fabric. Se sua rede é 192.168.0.0 e deseja gerenciar hosts 192.168.0.2 e 192.168.0.6 com seu fabfile , você poderia configurar env.hosts da seguinte forma:
#!/usr/bin/env python
from fabric.api import env
env.hosts = [ '192.168.0.2', '192.168.0.6' ]
A linha de código acima especifica apenas os hosts nos quais você executará tarefas do Fabric, mas não fará mais nada. Para que você possa definir algumas tarefas, o Fabric fornece um conjunto de funções que você pode usar para interagir com suas máquinas remotas.
Embora existam muitas funções, as mais comumente usadas são:
- run – que executa um comando shell em uma máquina remota.
- local – que executa o comando na máquina local.
- sudo – que executa um comando shell em uma máquina remota, com privilégios de root.
- Get – que baixa um ou mais arquivos de uma máquina remota.
- Put – que carrega um ou mais arquivos para uma máquina remota.
Exemplo 3: Para ecoar uma mensagem em várias máquinas, crie um fabfile.py
como o mostrado abaixo.
#!/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 executar as tarefas, execute o seguinte comando:
fab echo
Exemplo 4: Você pode melhorar o fabfile.py
que você criou anteriormente para executar o comando uptime na máquina local para que ele executa o comando uptime e também verifica o uso do disco usando o comando df em várias máquinas da seguinte maneira:
#!/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')
Salve o arquivo e execute o seguinte comando:
fab uptime
fab disk_space
Instale automaticamente a pilha LAMP no servidor Linux remoto
Exemplo 4: Vejamos um exemplo de implantação de um servidor LAMP (Linux, Apache, MySQL/MariaDB e PHP) em um servidor Linux remoto.
Escreveremos uma função que permitirá que o LAMP seja instalado remotamente usando privilégios de root.
Para RHEL/CentOS e 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 e 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")
Salve o arquivo e execute o seguinte comando:
fab deploy_lamp
Observação: Devido à grande produção, não podemos criar um screencast (gif animado) para este exemplo.
Agora você pode automatizar tarefas de gerenciamento de servidor Linux usando Fabric e seus recursos e exemplos dados acima…
Opções úteis de tecido
- Você pode executar
fab --help
para visualizar informações úteis e uma longa lista de opções de linha de comando disponíveis. - Uma opção importante
--fabfile=PATH
que ajuda você a especificar um arquivo de módulo Python diferente para importar, diferente defabfile.py
. - Para especificar um nome de usuário a ser usado ao conectar-se a hosts remotos, use a opção
--user=USER
. - Para usar uma senha para autenticação e/ou sudo, use a opção
--password=PASSWORD
. - Para imprimir informações detalhadas sobre o comando NAME, use a opção
--display=NAME
. - Para visualizar os formatos use a opção
--list
, opções: curto, normal, aninhado, use a opção--list-format=FORMAT
. - Para imprimir uma lista de comandos possíveis e sair, inclua a opção
--list
. - Você pode especificar o local do arquivo de configuração a ser usado usando a opção
--config=PATH
. - Para exibir uma saída de erro colorida, use
--colorize-errors
. - Para visualizar o número da versão do programa e sair, use a opção
--version
.
Resumo
Fabric é uma poderosa biblioteca Python que agiliza a execução remota de comandos por meio de SSH, fornecendo uma abordagem Pythonic fácil de usar. Sua capacidade de simplificar tarefas complexas e automatizar o gerenciamento de sistemas o torna uma ferramenta valiosa para administradores de sistemas, desenvolvedores e profissionais de DevOps.
Esteja você gerenciando um único servidor ou orquestrando uma implantação em grande escala, o Fabric pode ajudá-lo a realizar o trabalho com eficiência e eficácia.