Linux equivalente al telecomando "uno-a-molti" di PowerShell


38

Provenendo dall'amministrazione Windows, voglio approfondire in Linux (Debian). Una delle mie domande ardenti a cui non ho potuto rispondere nella ricerca sul Web (non l'ho trovata) è: come posso ottenere il cosiddetto telecomando "uno-a-molti" come in PowerShell per Windows?

Per dirlo alle basi direi:

Il mio punto di vista su Linux:

  • Posso ssh in un server e digitare il mio comando
  • Ottengo il risultato. Per un ambiente di 10 server dovrei scrivere uno script (perl / python?) Inviando il comando per ognuno di essi?

La mia esperienza con Windows:

  1. Digito il mio comando e con "invoke-command" posso "inviarlo" a un gruppo di server (forse da un file di testo) per eseguire simultaneamente e ottenere il risultato (come oggetto per ulteriori lavori).

  2. Posso anche stabilire più sessioni, la connessione viene mantenuta in background e inviare selettivamente i comandi a queste sessioni, e entrare e uscire da remoto come mi serve.

(Ho sentito di chef, burattini, ecc. È qualcosa del genere?)


Update 2019:
Dopo aver provato molto - suggerisco Rex (vedi questo commento sotto ) - installazione semplice (in effetti ha solo bisogno di ssh, nient'altro) e uso (se conosci solo un po ' perl è ancora meglio, ma è facoltativo)
Con Rex (ify ) puoi eseguire il comando ad hoc e portarlo a una vera gestione della configurazione (... il che significa: è un CM in primo luogo, ma anche per attività ad hoc) Il sito Web sembra obsoleto, ma attualmente (al 01/2019) è in sviluppo attivo e anche il canale IRC è attivo.

Con il nuovo openssh di Windows ci sono ancora più possibilità

Puoi provare: rex -u user -p password -H 192.168.1.3 -e 'say run "hostname"'



MobaXTerm supporta la "multi-esecuzione" in molte sessioni ssh: mobaxterm.mobatek.net/features.html (scorrere verso il basso). Inoltre, se l'ambiente della workstation principale è Windows, è anche uno strumento piuttosto semplice per la connessione a scatole Linux e molto altro.
Kev

con tmux: :setw synchronize-panes on( unix.stackexchange.com/a/124800/161003 )
eli

Risposte:


50

Sommario

  • Ansible è uno strumento DevOps che è un potente sostituto di PowerShell
  • RunDeck come interfaccia grafica è utile
  • Alcune persone eseguono RunDeck + Ansible insieme

clusterssh

Per l'invio di comandi remoti a più server, per un principiante, consiglierei i cluster

Per installare clustersshin Debian:

apt-get install clusterssh

Un altro tutorial sui cluster :

ClusterSSH è un wrapper Tk / Perl attorno a strumenti Linux standard come XTerm e SSH. Come tale, funzionerà praticamente su qualsiasi sistema operativo compatibile POSIX in cui esistono le librerie: l'ho eseguito su Linux, Solaris e Mac OS X. Richiede le librerie Perl Tk (perl-tk su Debian o Ubuntu) e X11 :: Protocol (libx11-protocol-perl su Debian o Ubuntu), oltre a xterm e OpenSSH.

ansible

Per quanto riguarda un framework remoto per l'amministrazione di più sistemi, Ansible è un'alternativa molto interessante a Puppet. È più snello e non ha bisogno di agenti remoti dedicati poiché funziona su SSH (è stato anche acquistato da RedHat)

I Playbook sono più elaborati rispetto alle opzioni della riga di comando.

Tuttavia, per iniziare a utilizzare Ansible è necessaria una semplice installazione e per impostare il file di testo dell'elenco dei client.

Successivamente, per eseguire un comando in tutti i server, è semplice come fare:

ansible all -m command -a "uptime"

L'output è anche ben formattato e separato per regola / server e durante l'esecuzione in background può essere reindirizzato a un file e consultato in seguito.

Puoi iniziare con semplici regole e l'utilizzo di Ansible diventerà più interessante man mano che cresci in Linux e la tua infrastruttura diventa più grande. Come tale, farà molto di più di PowerShell.

Ad esempio, un Playbook molto semplice per aggiornare i server Linux che ho scritto:

---
- hosts: all
  become: yes
  gather_facts: False
  tasks:
   - name: updates a server
     apt: update_cache=yes
   - name: upgrade a server
     apt: upgrade=full

Ha anche molti moduli definiti che consentono di scrivere facilmente politiche complete.

Modulo Index - Documentazione Ansible

Ha anche un interessante hub / rete "sociale" ufficiale di repository per la ricerca di politiche già realizzate dalla comunità. Galassia sensibile

Ansible è anche ampiamente usato e troverai molti progetti in github, come questo da me stesso per l' installazione di FreeRadius .

Mentre Ansible è un framework open source gratuito, ha anche un'interfaccia web panel a pagamento, Ansible Tower sebbene le licenze siano piuttosto costose.

Oggi, dopo che RedHat l'ha acquistato, tower ha anche la versione open source nota come AWX .

Come bonus, Ansible è anche in grado di amministrare i server Windows, anche se non l'ho mai usato per questo.

È anche in grado di amministrare apparecchiature di rete (router, switch e firewall), il che la rende una soluzione molto interessante come soluzione chiavi in ​​mano per l'automazione.

Come installare Ansible

Rundeck

Ancora una volta, per un framework remoto più facile da usare, ma non così potente come Ansible, consiglio Rundeck .

Si tratta di un'interfaccia grafica multiutente / login molto potente in cui è possibile automatizzare gran parte delle attività quotidiane comuni e persino fornire viste annacquate a utenti di sysops o helpdesk.

Quando si eseguono i comandi, ti dà anche Windows con l'output suddiviso per server / attività.

Può eseguire più processi in background senza soluzione di continuità e consente di visualizzare il report e l'output in un secondo momento.

immagine di rundeck

Come installare RunDeck

Nota che ci sono persone che eseguono Ansible + RunDeck come interfaccia web; non tutti i casi sono appropriati per questo.

Va da sé che l'utilizzo di Ansible e / o RunDeck può essere interpretato come una forma o parte della documentazione dell'infrastruttura e, nel tempo, consente di replicare e migliorare le azioni / ricette / Playbook.

Infine, parlando di un server di comando centrale, ne creerei uno per l'attività. In realtà il termine tecnico è un jump box. I "Jump Box" migliorano la sicurezza, se impostati correttamente .


1
Ansible è un'ottima soluzione rispetto ad alcuni script o utility che trasmettono semplicemente un comando a più server SSH. Ansible lo fa (ed è più adatto a quello scopo di Puppet o Chef), ma ti dà anche la possibilità di raggiungere il tuo obiettivo in un modo migliore, ad esempio usando un modulo integrato per installare qualcosa di idempotentemente invece di inviare semplicemente il comando install e sperando nel meglio.
JBentley,


12

È inoltre possibile utilizzare pssh(o parallel-ssh), che è un client SSH che si collega a un elenco di host ed esegue il comando su tutti gli host in parallelo:

$ parallel-ssh -i -H "host1 host2" uname -a
[1] 11:37:12 [SUCCESS] host2
Linux host2 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[2] 11:37:12 [SUCCESS] host1
Linux host1 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

11

Forse puoi raggiungere il tuo obiettivo con una semplice funzione zsh (bash). Supponiamo che tu abbia server l61 l62 l63 e spesso devi eseguire un comando su di essi:

function run_on_cluster()
{
    (for srv in l61 l62 l63;
    do
        echo "ssh $srv $1";
    done) | parallel --gnu
}

Quindi, nella riga di comando:

$ run_on_cluster "uname -r"
2.6.32-279.el6.x86_64
2.6.32-279.el6.x86_64
2.6.32-504.23.4.el6.x86_64

5
Consiglierei di stampare il nome dei server prima del loro output. L'esecuzione dello script in parallelo comporta anche altre stranezze, come la confusione dell'output dello script: è necessario adottare misure aggiuntive per preservare l'attività dell'output. L'esecuzione di ogni attività in primo piano offre anche la possibilità di un'interazione di input minima.
Rui F Ribeiro,

3

Se stai usando KDE, ecco un altro metodo.
- Apri una finestra di Konsole.
Per ogni server con cui vuoi comunicare:
- apri una scheda
- stabilisci una connessione ssh con il server
Nel menu "Modifica", seleziona "copia input" in "tutte le schede"

Ogni comando inserito in quella scheda verrà copiato su tutti i server.
Puoi passare da una scheda all'altra per vedere i diversi risultati.

Nota: le etichette dei miei menu (tra virgolette) potrebbero essere errate poiché non utilizzo una versione inglese di KDE


1

Parallelo GNU

Permette di utilizzare una sola riga con le impostazioni salvate, in modo da poter creare un profilo, "prod", che conterrà un elenco di server e opzioni comuni. Quindi aggiungi il comando che desideri e sei pronto. Puoi anche copiare i file in il server e li elimina automaticamente alla fine, ed è abbastanza conveniente per script ancora più grandi. Inoltre è molto veloce.

L'unico problema è che ha così tante opzioni;) Ma la documentazione include anche molti esempi, quindi puoi guardarli all'inizio.


2
Ciao, benvenuto su Linux e Linux. Qualcuno ha già dato uno script usando gnu-parallel ha un esempio. Ti consiglio di dare un'occhiata in giro, le risposte più elaborate sono apprezzate e ti daranno più punti.
Rui F Ribeiro,

1
@RuiFRibeiro scusate non me ne sono accorto, SO bug delle app Android con codebox e non ho potuto vedere la maggior parte dei contenuti (genera spazi bianchi). Hai detto che gnu-parallel sta sfogliando l'output - può scriverlo in ordine ma devi dirgli di farlo :)
alkuzad

Sì, non ne ho familiarità, ma lo sospetto già, quindi menzionare la risposta deve essere migliorata. Grazie. Nulla ti impedisce di scrivere una risposta migliore al riguardo, tuttavia per commentare, ti consiglio di commentare in quella risposta.
Rui F Ribeiro,

1

Voglio menzionare anche "Rex" qui: https://www.rexify.org/

È uno strumento fantastico che utilizza perl + ssh (utente / password o autenticazione chiave) e poiché perl è installato su ogni sistema (?!) Linux, penso che sia più naturale da usare (ha alcune somiglianze con Ansible & Co.)

puoi eseguire comandi ad hoc su più server contemporaneamente (server1, server2, server ... - dopo aver impostato l'autenticazione, o in alternativa utilizzare i parametri -p / -u e -s / -S per l'esecuzione sudo del comando):

$ rex -H "server[1..3]" -e 'say run "uptime"'

o creare un file in cui si specificano diverse "attività" e chiamarle da lì

$ rex -f myConfigFile.rex uptime

Può essere installato tramite repository o anche con perls cpan (o cpanm Rex) e la sua configurazione iniziale è semplice, vedere:
- https://www.rexify.org/ oppure
- https://www.rexify.org/docs/guides/ start_using__r__ex.html e
- http://www.admin-magazine.com/Archive/2014/21/First-steps-in-IT-automation-by-Rex

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.