Ricerca nel sito web

Come configurare i nodi gestiti Ansible ed eseguire comandi ad hoc - Parte 3


Nei due articoli precedenti di questa serie Ansible, abbiamo spiegato i componenti principali di Ansible e l'impostazione del nodo di controllo Ansible. In questa parte 3, dimostreremo come configurare i nodi gestiti Ansible per eseguire comandi ad hoc su host remoti.

Configura l'autenticazione SSH senza password sui nodi gestiti Ansible

Ricapitolando il nostro ultimo argomento, la gestione degli host remoti con Ansible richiede la configurazione dell'autenticazione SSH senza password tra il nodo di controllo Ansible e gli host gestiti. Ciò comporta la generazione di una coppia di chiavi (coppia di chiavi SSH pubblica e privata) sul nodo Ansible Control e la copia della chiave pubblica su tutti gli host remoti. Questo sarà un passo cruciale per il futuro e renderà il tuo lavoro molto più semplice.

Configurare l'escalation dei privilegi sui nodi gestiti

Quando si accede come utente normale, potrebbe essere necessario eseguire determinate attività sui nodi gestiti che richiedono privilegi elevati o privilegi root. Queste attività includono la gestione dei pacchetti, l'aggiunta di nuovi utenti e gruppi e la modifica delle configurazioni di sistema per citarne solo alcune. Per raggiungere questo obiettivo, è necessario richiamare determinate direttive nel playbook per eseguire le attività come utente privilegiato sugli host remoti.

diventare

Ansible ti consente di 'diventare' un altro utente sul nodo gestito diverso da quello attualmente connesso. La direttiva become:yes eleva i tuoi privilegi e ti consente di eseguire attività che richiedono privilegi di root come l'installazione e l'aggiornamento dei pacchetti e il riavvio del sistema.

Considera un playbook httpd.yml che installa e avvia il server web Apache come mostrato:

---
- name: install and start Apache webserver
  hosts: webservers

  tasks:
       - name: install httpd
         yum: name=httpd  state=latest
         become: yes
       - name: check httpd status
         service: name=httpd state=started

La direttiva become: yes consente di eseguire comandi come utente root sull'host remoto.

diventa_utente

Un'altra direttiva che puoi utilizzare per diventare un altro utente è diventa_utente. Ciò ti consente di passare a un utente sudo sull'host remoto al momento dell'accesso e non all'utente con cui accedi.

Ad esempio, per eseguire un comando come utente tecmint sul telecomando, utilizzare la direttiva come mostrato.

- name: Run a command as the apache user
  command: somecommand
  become: yes
  become_user: tecmint

metodo_diventato

Questa direttiva sovrascriverà il metodo predefinito impostato nel file ansible.cfg che solitamente è impostato su sudo.

diventano_bandiere

Questi vengono utilizzati a livello di gioco o di attività, ad esempio quando è necessario passare a un utente quando la shell è impostata su nologin.

Per esempio,

- name: Run a command as nobody
  command: somecommand
  become: true
  become_method: su
  become_user: nobody
  become_flags: '-s /bin/sh'

Opzioni della riga di comando nell'escalation dei privilegi

Diamo un'occhiata ad alcune delle opzioni della riga di comando che puoi utilizzare per elevare i tuoi privilegi durante l'esecuzione dei comandi:

  • --ask-become-pass, -K – Richiede la password dell'utente sudo sul sistema remoto a cui stai tentando di connetterti.
ansible-playbook myplaybook.yml --ask-become-pass

  • --become, -b: consente di eseguire l'attività come utente root senza richiedere una password.
ansible-playbook myplaybook.yml --become 
  • --become-user=BECOME_USER – Ti consente di eseguire attività come un altro utente.
ansible-playbook myplaybook.yml --become-user=tecmint

Convalida una configurazione funzionante utilizzando comandi Ansible ad hoc

A volte, potresti voler eseguire attività rapide e semplici su host o server remoti in Ansible senza dover necessariamente creare un playbook. In tal caso, dovrai eseguire un comando ad hoc.

Cos'è un comando ad hoc?

Un comando ad hoc ansible è un comando di una riga che ti aiuta a eseguire attività semplici in modo semplice ma efficiente senza la necessità di creare playbook. Tali attività includono la copia di file tra host, il riavvio dei server, l'aggiunta e la rimozione di utenti e l'installazione di un singolo pacchetto.

In questo tutorial esploriamo varie applicazioni dei comandi Ansible Ad-Hoc. Utilizzeremo il file di inventario riportato di seguito per una dimostrazione.

[webservers]
173.82.115.165

[database_servers]
173.82.202.239

Utilizzo di base dei comandi ad hoc

L'utilizzo più elementare dei comandi Ansible-Adhoc è il ping di un host o di un gruppo di host.

ansible -m ping all

Nel comando precedente, il parametro -m è l'opzione del modulo. Ping è il comando ad hoc e il secondo parametro rappresenta tutti gli host nel file di inventario. L'output del comando è mostrato di seguito:

Per eseguire il ping di un particolare gruppo di host, sostituisci il parametro 'all' con il nome del gruppo. Nell'esempio seguente, stiamo testando la connettività con gli host nel gruppo webservers.

ansible -m ping webservers

Inoltre, puoi utilizzare l'attributo -a per specificare i normali comandi Linux tra virgolette doppie. Ad esempio, per verificare il tempo di attività dei sistemi remoti, eseguire:

ansible -a "uptime" all

Per verificare l'utilizzo del disco degli host remoti eseguire.

ansible -a "df -Th" all

Esistono centinaia e centinaia di moduli che puoi utilizzare con il comando Adhoc. Per visualizzare l'intero elenco dei moduli con le relative descrizioni, esegui il comando seguente.

ansible-doc -l

Per visualizzare informazioni dettagliate su un particolare modulo, eseguire il comando.

ansible-doc module_name

Ad esempio, per cercare maggiori dettagli sul modulo yum esegui:

ansible-doc yum

Gestione di pacchetti/servizi con Ansible

I comandi ad hoc Ansible possono essere utilizzati per l'installazione e la rimozione di pacchetti utilizzando i gestori di pacchetti yum e apt.

Per installare il server web Apache sull'host CentOS 7 nel gruppo webservers nel file di inventario, esegui il comando:

ansible webservers -m yum -a "name=httpd  state=present"

Per verificare l'installazione del server web Apache, accedere al client remoto ed eseguire.

rpm -qa | grep httpd

Per disinstallare Apache, è sufficiente modificare lo stato da presente ad assente.

ansible webservers -m yum -a "name=httpd  state=absent"

Ancora una volta, per confermare la rimozione di httpd eseguire.

rpm -qa | grep httpd

Come osservato, i pacchetti del server Web Apache sono stati eliminati.

Creazione di utenti e gruppi utilizzando Ansible

Durante la creazione degli utenti, il modulo "utente" è utile. Per creare un nuovo utente james con password redhat sul sistema client database_server, immetti il comando.

ansible database_server -m user -a "name=james password=redhat"

Per confermare la creazione del nuovo utente eseguire il comando:

ansible database_servers -a "id james"

Per rimuovere l'utente, esegui il comando:

ansible database_servers -m user -a "name=james state=absent"

Aumento dei privilegi

Se esegui Ansible come utente normale, Ansible fornisce l'escalation dei privilegi negli host remoti utilizzando l'opzione --become per acquisire i privilegi di root e -k per richiedere la password.

Ad esempio, per eseguire il comando ad hoc Ansible 'netstat -pnltu' con l'opzione privilegiata –-become e l'opzione -K per richiedere il la password dell'utente root per eseguire il comando.

ansible webservers -m shell -a 'netstat -pnltu' --become -K

Per diventare un altro utente diverso da root, utilizza l'attributo --become-user.

Ad esempio, per eseguire "df -Th" come utente tecmint sugli host remoti e richiedere la password eseguire:

ansible all -m shell -a 'df -Th' --become-user tecmint -K

Raccolta di fatti sui sistemi host

I fatti si riferiscono a informazioni dettagliate su un sistema. Ciò include informazioni sull'indirizzo IP, sull'architettura del sistema, sulla memoria e sulla CPU, per citarne alcuni.

Per recuperare informazioni sugli host remoti, esegui il comando:

ansible all -m setup 

Trasferimento file/Copia file

Ansible utilizza il modulo copia per copiare in modo sicuro i file dal controllo Ansible a più host remoti.

Di seguito è riportato un esempio di operazione di copia:

ansible webservers -m copy -a "src=/var/log/secure dest=/tmp/"

Il comando copia il file /var/log/secure nel nodo Ansible Control sugli host remoti nel gruppo webservers nella destinazione /tmp.

Puoi utilizzare il modulo file per modificare le autorizzazioni e la proprietà dei file.

ansible webservers -m file -a "dest=/tmp/secure mode=600"

Inoltre, puoi aggiungere gli argomenti del proprietario e del gruppo come mostrato:

ansible webservers -m file -a "dest=/tmp/secure mode=600 owner=tecmint group=tecmint"

Puoi anche creare directory, in modo simile a mkdir -p come mostrato.

ansible webservers -m file -a "dest=/path/to/directory mode=755 owner=tecmint group=tecmint state=directory"

Per esempio,

ansible webservers -m file -a "dest=/home/tecmint/data mode=755 owner=tecmint group=tecmint state=directory"

Conclusione

In questo articolo, facciamo luce su come configurare i nodi gestiti per eseguire comandi ad hoc Ansible per gestire host remoti. Ci auguriamo che tu lo abbia trovato utile. Provatelo e fateci sapere come è andata.