Tessuto – Automatizza l’esecuzione di comandi Linux e il rilascio tramite SSH

Nell’imperiale mondo in costante evoluzione della programmazione software, la gestione remota efficiente dei server è cruciale. Non importa se sei un amministratore di sistema, un ingegenere software o un programmatore, la capacità di eseguire comandi Linux su server remoti è una task comune.

Ecco dove entra in gioco Fabric, una libreria Python di alto livello progettata per l’esecuzione di comandi Linux remoti tramite SSH, diventando uno strumento indispensabile per chi ha bisogno di gestire sistemi remoti mentre sfrutta il potere di Python.

Cos’è Fabric?

Fabric è una versatile libreria Python che semplifica il processo di esecuzione di comandi della shell su server remoti tramite connessioni SSH. È stata inizialmente sviluppata da Jeff Forcier e successivamente diventata un progetto open source.

Fornisce una interfaccia ad alto livello, in stile Python, per l’interazione con i sistemi remoti, permettendoti di automatizzare attività, distribuire codice e gestire configurazioni su molti server con facilità.

Perché utilizzare Fabric?

Ci sono diverse ragioni convincenti per scegliere Fabric per i tuoi bisogni di esecuzione di comandi remoti:

  • Approccio Pythonico – Fabric aderisce alla filosofia di Python, rendendo facile per sviluppatori e amministratori di sistema scrivere script in un linguaggio con cui sono già familiari.
  • SSH e Paramiko – Fabric si basa sulla libreria Paramiko per gestire connessioni SSH, che fornisce un modo sicuro e affidabile per eseguire comandi in remoto.
  • Flusso di lavoro basato su task – Fabric incoraggia un approccio orientato ai task per l’esecuzione di comandi remoti. Definisci i task, che sono essenzialmente funzioni Python, e Fabric si occupa di eseguirli sui server remoti.
  • Casi d’uso – Fabric è uno strumento versatile adatto a una vasta gamma di casi d’uso, tra cui il rilascio di applicazioni, la gestione delle configurazioni del server e l’esecuzione di compiti di manutenzione di sistema.

In questa guida, copriremo i passaggi per introdurre e iniziare ad utilizzare Fabric per migliorare l’amministrazione del server per gruppi di server.

Come installare lo strumento di automazione Fabric in Linux

Una caratteristica importante di fabric è che le macchine remote che è necessario amministrare devono solo avere installato il server OpenSSH standard.Hai solo bisogno di determinati requisiti installati sul server da cui stai amministrando i server remoti prima di poter iniziare.

È necessario installare determinati requisiti sul server da cui si sta gestendo i server remoti prima di poter iniziare.

Requisiti:

  • Python 2.5+ con i headers di sviluppo
  • Python-setuptools e pip (opzionali, ma preferiti) gcc

Fabric è facilmente installabile utilizzando il gestore di pacchetti pip, ma potresti anche preferire di scegliere il tuo gestore di pacchetti predefinito yum, dnf, o apt/apt-get per installare il pacchetto fabric, tipicamente chiamato fabric o python-fabric.

Installare Fabric nei sistemi RHEL

Su distribuzioni basate su RHEL come CentOS Stream, Rocky Linux e AlmaLinux, è necessario avere il repository EPEL installato ed abilitato sul sistema per installare il pacchetto fabric.

sudo dnf install epel-release
sudo dnf install fabric

Installare Fabric su sistemi Debian

Su distribuzioni basate su Debian come Ubuntu e Linux Mint, gli utenti possono semplicemente eseguire apt per installare il pacchetto fabric come mostrato:

sudo apt install fabric

Installare Fabric utilizzando PiP

Se fabric non è disponibile dalle repository del tuo sistema, puoi utilizzare pip per installarlo come mostrato.

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 volta installato correttamente pip, puoi utilizzare pip per ottenere la versione più recente di fabric come mostrato:

pip3 install fabric

Come utilizzare Fabric per automatizzare le attività di amministrazione Linux

Iniziamo a vedere come utilizzare Fabric. Nel processo di installazione, uno script Python chiamato 'fab' è stato aggiunto a una directory nel PATH del tuo sistema. Lo script 'fab' gestisce tutte le attività quando si utilizza Fabric.

Eseguire comandi Linux localmente

Per convenzione, è necessario iniziare creando un file Python chiamato fabfile.py utilizzando il tuo editor di testo preferito. Ricorda che puoi dare a questo file un nome diverso a tuo piacimento, ma dovrai specificare il percorso del file come segue:

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

Fabric utilizza 'fabfile.py' per eseguire compiti, il 'fabfile' dovrebbe trovarsi nella stessa directory in cui si esegue lo strumento Fabric.

Esempio1: Creiamo prima un semplice Hello World.

# vi fabfile.py

Aggiungi queste righe di codice al file.

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

Salva il file ed esegui il comando seguente.

# fab hello
Fabric Tool Usage

Ora diamo un’occhiata a un esempio di fabfile.py per eseguire il comando uptime sul computer locale.

Esempio2: Apri un nuovo file fabfile.py come segue:

# vi fabfile.py

E incollane le seguenti righe di codice nel file.

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

Quindi salva il file ed esegui il seguente comando:

# fab uptime
Fabric: Check System Uptime

Eseguire comandi Linux in remoto via SSH

L’API Fabric utilizza un dizionario di configurazione che è l’equivalente Python di un array associativo noto come env, che memorizza i valori che controllano cosa fa Fabric.

Il env.hosts è un elenco di server su cui si desidera eseguire le attività Fabric. Se la tua rete è 192.168.0.0 e desideri gestire i host 192.168.0.2 e 192.168.0.6 con il tuo fabfile, potresti configurare il env.hosts come segue:

#!/usr/bin/env python
from  fabric.api import env
env.hosts = [ '192.168.0.2', '192.168.0.6' ]

La riga di codice sopra specifica solo gli host su cui eseguire le attività Fabric, ma non fa altro. Pertanto, puoi definire alcune attività, Fabric fornisce un set di funzioni che puoi utilizzare per interagire con i tuoi macchine remote.

Sebbene ci siano molte funzioni, le più comunemente utilizzate sono:

  • run – che esegue un comando shell su una macchina remota.
  • local – che esegue il comando sulla macchina locale.
  • sudo – che esegue un comando shell su una macchina remota, con privilegi di root.
  • Get – che scarica uno o più file da una macchina remota.
  • Put – che carica uno o più file su una macchina remota.

Esempio3: Per visualizzare un messaggio su più macchine, crea un fabfile.py come quello riportato di seguito.

#!/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 ' ")

Per eseguire le attività, esegui il seguente comando:

# fab echo
Fabric: Automate Linux Tasks on Remote Linux

Esempio4: È possibile migliorare il fabfile.py che è stato creato in precedenza per eseguire il comando uptime sul computer locale in modo che esegua il comando uptime e controlli anche l’utilizzo del disco utilizzando il comando df su più macchine come segue:

#!/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')

Salva il file ed esegui il seguente comando:

# fab uptime
# fab disk_space
Fabric: Automate Tasks on Multiple Linux Systems

Installazione automatica dello stack LAMP su server Linux remoto

Esempio4: Diamo un’occhiata a un esempio di implementazione di un LAMP (Linux, Apache, MySQL/MariaDB e PHP) server su un server Linux remoto.

Scriveremo una funzione che permetterà l’installazione remota di LAMP utilizzando privilegi di root.

Per 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")
Per 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")

Salva il file ed esegui il seguente comando:

# fab deploy_lamp

Nota: A causa dell’ampia produzione, non possiamo creare uno screencast (animazione gif) per questo esempio.

Ora è possibile automatizzare le attività di gestione del server Linux utilizzando Fabric e le sue funzionalità ed esempi forniti sopra…

Opzioni utili di Fabric

  • Puoi eseguire fab --help per visualizzare informazioni utili e un’ampia lista di opzioni da riga di comando disponibili.
  • Un’opzione importante --fabfile=PATH che ti aiuta a specificare un diverso file di modulo Python da importare rispetto a fabfile.py.
  • Per specificare un nome utente da utilizzare durante la connessione a host remoti, usa l’opzione --user=USER.
  • Per utilizzare una password per l’autenticazione e/o sudo, usa l’opzione --password=PASSWORD.
  • Per stampare informazioni dettagliate sul comando NAME, usa l’opzione --display=NAME.
  • Per visualizzare i formati usa l’opzione --list, scelte: breve, normale, annidato, usa l’opzione --list-format=FORMAT.
  • Per stampare un elenco di comandi possibili ed uscire, include l’opzione --list.
  • Puoi specificare la posizione del file di configurazione da utilizzare utilizzando l’opzione --config=PATH.
  • Per visualizzare una uscita di errore colorata, usa --colorize-errors.
  • Per visualizzare il numero di versione del programma ed uscire, usa l’opzione --version.
Riassunto

Fabric è una potente libreria Python che semplifica l’esecuzione di comandi remoti tramite SSH, fornendo un approccio user-friendly e Pythonico. La sua capacità di semplificare compiti complessi e automatizzare la gestione dei sistemi lo rende uno strumento prezioso per amministratori di sistema, sviluppatori e professionisti DevOps.

Che tu stia gestendo un singolo server o orchestrando una distribuzione su larga scala, Fabric può aiutarti a svolgere il lavoro in modo efficiente ed efficace.

Source:
https://www.tecmint.com/automating-linux-system-administration-tasks/