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.