GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire un comando singolo su più sistemi remoti contemporaneamente

Tempo fa abbiamo pubblicato una guida per "copiare un file in più directory nella riga di comando su Linux" . In quell'articolo, ti abbiamo insegnato vari metodi per copiare un singolo file in più directory contemporaneamente. Oggi vedremo come eseguire un singolo comando su più sistemi remoti contemporaneamente in sistemi operativi simili a Unix. Come già sai, possiamo accedere e comunicare con il sistema remoto usando ssh. openSSH ci consente di eseguire tutti i tipi di attività di amministrazione in un sistema remoto. Una limitazione con openSSH è che non possiamo eseguire il singolo comando su più sistemi remoti contemporaneamente. Nessun problema. Ecco dove PSSH viene a colmare questa lacuna.

Scarica - Guida gratuita:"Guida alla programmazione del modulo del kernel Linux"

PSSH o P arallel SSH , è una suite a riga di comando che ti aiuta a ssh in parallelo su un certo numero di host. La suite PSSH comprende  i seguenti comandi:

  • pssh - SSH a più sistemi remoti in parallelo,
  • pscp - Copia i file in parallelo su un certo numero di host,
  • sincronizzazione : copia i file in parallelo su un certo numero di host,
  • pnuke : Chiudi processi in parallelo su più host,
  • slurp :copia i file in parallelo da più host.

In questo tutorial vedremo come eseguire un singolo comando su più host contemporaneamente utilizzando PSSH.

Installa PSSH

Possiamo facilmente installare PSSH utilizzando PIP , un gestore di pacchetti Python.

Per installare PIP su Arch Linux e suoi derivati, eseguire:

$ sudo pacman -S python-pip

Su RHEL, Fedora, CentOS:

$ sudo yum install epel-release
$ sudo yum install python-pip

Oppure,

$ sudo dnf install epel-release
$ sudo dnf install python-pip

Su Debian, Ubuntu, Linux Mint:

$ sudo apt-get install python-pip

Per maggiori dettagli sulla gestione dei pacchetti Python tramite PIP, fare riferimento al seguente collegamento.

  • Come gestire i pacchetti Python utilizzando Pip

Una volta installato PIP, eseguire il comando seguente per installare PSSH.

$ sudo pip install pssh

PSSH è stato installato! Andiamo avanti e vediamo come usarlo.

Esegui un comando singolo su più sistemi remoti contemporaneamente utilizzando PSSH

Importante: Per utilizzare PSSH (solo ai fini di questo tutorial), tutti i tuoi sistemi remoti devono avere un nome utente comune con la stessa password . Altrimenti, questo metodo non aiuterà. Supponiamo, ad esempio, di aver già creato un utente chiamato sk con password otechnix su tutti i miei host remoti. Dovresti avere lo stesso utente con la stessa password anche su tutti i tuoi sistemi remoti.

Ora, vediamo come eseguire un singolo comando su più host remoti utilizzando PSSH. Vai al tuo sistema locale in cui desideri eseguire il comando e crea un file di testo chiamato remotehosts.txt . Puoi nominarlo come desideri.

$ vi remotehosts.txt

Aggiungi gli indirizzi IP dei tuoi host remoti con i numeri di porta uno per uno come esattamente mostrato di seguito.

192.168.1.103:22
192.168.1.104:22

Dove, 192.168.1.103 e 192.168.1.104 sono gli indirizzi IP dei miei sistemi remoti. 22 è il numero della porta ssh. Devi menzionare il numero di porta corretto se l'hai già cambiato. Inoltre, assicurati di poter accedere a tutti gli host remoti dal tuo sistema locale tramite ssh.

Ora, controlliamo il tempo di attività di entrambi gli host remoti dal nostro sistema locale. Per farlo, esegui:

$ pssh -h remotehosts.txt -l sk -A -i "uptime"

Ecco,

  • remotehosts.txt - Contiene gli indirizzi IP di entrambi i sistemi remoti.
  • sk - il nome utente di entrambi i sistemi remoti

Immettere la password dell'utente "sk" .

Risultato di esempio:

Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 20:51:15 [SUCCESS] 192.168.1.103:22
 20:50:50 up 8 min, 1 user, load average: 0.05, 0.11, 0.10
[2] 20:51:15 [SUCCESS] 192.168.1.104:22
 20:50:52 up 12 min, 1 user, load average: 0.00, 0.07, 0.12

Come vedi sopra, abbiamo eseguito il comando "uptime" su due host remoti e ottenuto il risultato in una volta sola.

E la versione del kernel? Per verificare la versione installata di entrambi gli host remoti, eseguire:

$ pssh -h remotehosts.txt -l sk -A -i "uname -r"

Risultato di esempio:

Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 20:53:09 [SUCCESS] 192.168.1.103:22
3.10.0-327.22.2.el7.x86_64
[2] 20:53:09 [SUCCESS] 192.168.1.104:22
4.4.0-21-generic

Molto bello, vero? Possiamo creare una directory su entrambi gli host remoti contemporaneamente? Sì, naturalmente! Per farlo, esegui il seguente comando:

$ pssh -h remotehosts.txt -l sk -A -i "mkdir dir1"

Allo stesso modo, puoi fare qualsiasi cosa tu voglia fare su più host remoti dal tuo sistema locale usando PSSH.

Importante: Si prega di prestare molta attenzione durante l'utilizzo di PSSH. Un comando errato verrà eseguito contemporaneamente su più host e danneggerà tutti gli host. Quindi, fai molta attenzione mentre usi questo metodo nella produzione. Ti suggerisco di testarlo in una macchina virtuale. Una volta che avrai acquisito familiarità con PSSH, potrai utilizzarlo in produzione, se lo desideri.

Lettura consigliata:

  • DSH:esegui un comando Linux su più host alla volta
  • Esegui comandi su sistemi Linux remoti tramite SSH

Spero che questo aiuti.


Linux
  1. Come eseguire un comando memorizzato in una variabile?

  2. Come rinominare più file contemporaneamente in Linux

  3. Come eseguo più comandi in background in bash in una singola riga?

  4. Come rinominare più file in un singolo comando o script in Unix?

  5. Come eseguire un comando una volta che uno scrub ZFS * è stato completato *?

Come eseguire il comando / script della shell di Linux in background

Come utilizzare il comando SFTP per trasferire file

Come eseguire il comando Sudo senza password

Come eseguire i comandi Linux in background

Come eseguire più comandi Linux in un unico comando

Come eseguire più comandi Linux contemporaneamente nel terminale Linux