Table of contents
- Introduzione
- Che cos'è Ansible
- Prerequisiti
- Ambiente di Laboratorio
- Aggiorniamo le 2 macchine Fedora
- Installiamo Ansible con dnf (il package manager di fedora)
- Generazione delle chiavi SSH per l'utenza che farà automation
- Configurazione e Testing dell'installazione di Ansible
- Ansible - Creazione di un Playbook
- Conclusioni
Introduzione
In questo articolo, vedremo come poter installare Ansible su Fedora 38 passo per passo e una volta completatp avremo un piccolo ambiente funzionante con un'istallazione di ansible, che controllerà, nel nostro caso, solamente un nodo remoto
Che cos'è Ansible
Ansible è uno strumento di automazione gratuito e open source (senza agent) che gestisce macchine Linux remote tramite protocollo ssh. Il sistema su cui viene installato ansible solitamente è noto come Control Node e le macchine remote gestite da ansible sono chiamate solitamente Managed Node
Prerequisiti
Installazione minima di Fedora (almeno due macchine), nel nostro caso utilizzeremo 2 VM (virtual machine) in ambiente virtualizzato vSphere
Utente con diritti di ammistrazione sudo su entrambe le macchine (per comodità utilizzeremo utenza root)
Macchine già abilitate all'accesso SSH attraverso la porta 22
Connettività di rete su entrambe le macchine
Ambiente di Laboratorio
il nostro laboratorio in ambiente VMware vSphere sarà quindi composta da 2 VM Fedora Linux 38 con installazione minima (solo componenti base e Terminal) così suddivise:
Control Node - ansible-cn (hostname) - 192.168.8.119 (ipv4)
Managed Node - managed-node (hostname) - 192.168.8.120 (ipv4)
su entrambe le vm utilizzeremo solamente utenza di root a scopo puramente dimostrativo e per comodità, in ambienti di produzione non utilizzare MAI utenza di root per effettuare operazioni di control e automation
Aggiorniamo le 2 macchine Fedora
Prima di proseguire con installare e configurare il nostro ambiente di ansible, su entrambe le VM Fedora38 effettuiamo log in e lanciamo il comando:
sudo dnf update -y
una volta lanciato il comando ed effettuato update su entrambe le VM, facciamo anche un reboot in modo da partire da una situazione il più pulito possibile
sudo reboot
Installiamo Ansible con dnf (il package manager di fedora)
Su Fedora38 installare Ansible è relativamente semplice in quanto il suo pacchetto, come le sue dipendenze sono disponibili nei repository ufficiali di Fedora.
Eseguiamo quindi semplicemente il comando dnf per installarlo:
sudo dnf install -y ansible
attendiamo giusto qualche minuto che il pacchetto con tutte le sue dipenzenze venga installato nel sistema
e una volta completata l'installazione, proseguiamo verificando il corretto funzionamento di Ansible usando il comando:
ansible --version
che dovrebbe restituirci come output il versioning di ansible core e i vari componenti che lo compongono , come i file di configurazione
Generazione delle chiavi SSH per l'utenza che farà automation
In questo passaggio vedremo come generare la chiave SSH dell'utenza root che useremo tramite ansible per effettuare automation sui managed node
IMPORTANTE: nell'articolo utilizzeremo utenza di root , ma le operazioni sono valide per qualunque utenza vogliate creare ed utilizzare , la cosa importante è che su entrambi i sistemi l'utenza xxx (la vostra utenza con nome da voi scelto) esista e abbia privilegi sudo
generiamo quindi la chiave ssh per l'utenza scelta (in questo caso root) e proseguiamo condividendo la chiave ssh suui vari sistemi remoti (nel nostro caso managed-node)
per poter generare la chiave ssh , portiamoci prima di tutto sul percorso home dell'utente scelto, per farlo dovremo essere loggati sul terminale con quell'utenza e successivamente lanciare il comando:
cd
e premere invio
, questo comando ci riporterà direttamente alla home dell'utente, utilizziamo subito dopo il comando:
ls -1A
questo comando ci darà anche come output le cartelle nascoste sotto la cartella principale della nostra utenza , la cartella che ci interessa in questo momento sarà la cartella .ssh
proseguiamo lanciamo il comando per generare la nuova chiave SSH
ssh-keygen
il comando chiederà diversi input, premiamo solo invio
senza inserire nulla e drovremmo avere un output come il seguente:
avremo quindi generato due file sotto la cartella .ssh , che sono id_rsa e id_rsa.pub
questa chiave id_rsa verrà utilizzata dall'automazione di ansible per la connessione in SSH alle macchine remote (managed-node) e l'autenticazione avverrà grazie alla chiave e quindi senza password
per far si che il tutto funzioni dobbiamo prima condividere la chiave generata con il managed-node e possiamo farlo utilizzando il comando
ssh-copy-id root@192.168.8.120
NOTA: il comando ssh-copy-id utilizza la connessione ssh per connettersi al server remoto e copiare l'id sull'utenza con cui ci colleghiamo (sempre root nel nostro caso).
Il comando è così composto, dunque, perchè copierà la chiave ssh dall'utenza di root della VM ansible-cn (192.168.8.119) all'utenza di root della VM managed-node (192.168.8.120).
NB: il comando va quindi eseguito dal Control Node di ansible e l'operazione andrà ripetuta per tutti i vari nodi che vorremmo connettere alla nostra istanza, nel nostro caso solamente uno managed-node
un volta completato, dovremmo aver copiato correttamente la chiave SSH sul managed-node ed essere qundi in grado di collegarci e di gestirlo senza password. Sotto l'utenza di root del managed-node, nella cartella nascosta .ssh della sua home directory, dovremmo avere un file chiamato autorizhed_keys, il quale viene generato appunto quando vengono copiate delle chiavi da altre istanze (altri server o VM)
navigando all'interno del file dovremmo vedere la chiave e il certificato generato sul control-node ansible-cn.
Configurazione e Testing dell'installazione di Ansible
Per testare l'installazione ansible, proveremo a gestire il sistema remoto managed-node (192.168.8.120) per farlo dovremmo prima settare alcune configurazioni di ansible tra cui:
ansible.cfg
file che contenente le configurazioni base di ansible
hosts
che farà da database dell'inventario delle macchine gestite
portiamoci quindi da terminale sotto al persorso /etc/ansible
nel quale troveroemo i file di configurazione, con il comando:
cd /etc/ansible
partiamo editando il file ansible.cfg utilizando l'editor di testo nano (già presente in fedora) lanciamolo con il comando:
sudo nano ansible.cfg
ci si aprirà l'editor di testo nano, con caricato il file ansible.cfg dal quale potremmo apportare le modifiche appunto alla configurazione di ansible, inseriamo nel file le linee a seguire:
[defaults]
inventory = ./hosts
remote_user = root
host_key_checking = False
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
con quanto inserito sopra setteremo alle configurazioni di ansible , in ordine, che il file dell'inventario sarà appunto il file hosts presente nella medesima directory sotto /etc/ansible
e che l'utenza che dovrà utilizzare per effetuare task di automation sarà appunto root.
nella seconda parte della configurazione [privilege_escalation], definirà l'elevazione dell'utenza come sudo , nel caso aveste usato un'utenza creata ad-hoc.
inseriamo quindi le configurazioni all'interno del file:
e premiamo CTRL+O
per salvare le modifiche e successivamente CTRL+X
per chiudere l'editor.
ora ripetiamo il passaggio precedente editando anche il file hosts, nel quale aggiungeremo il nostro managed-node (192.168.8.120) , in modo tale che ansible possa distinguere i diversi sistemi inventariati.
dalla folder di ansible dunque, lanciamo il comando:
sudo nano hosts
e ci si aprirà nuovmente l'editor di testo nano, con caricato il file hosts nel quale inseriremo tutte le macchine managed al nostro inventario,nel nostro caso inseriremo:
[managed-node]
192.168.8.120
premiamo CTRL+O
per salvare le modifiche e successivamente CTRL+X
per chiudere l'editor.
Ora possiamo finalmente testare la nostra installazione di ansible con un paio di semplici comandi
test del ping del nodo remoto
ansible managed-node -m ping
il cui output (se abbiamo configurato tutto a dovere) dovrebbe restituirci:
ora lanciamo un ulteriore comando un pò più "avanzato" , con il quale faremo eseguire ad ansible un comando bash sul sistema remoto:
esecuzione di un comando bash sul nodo remoto
ansible managed-node -m shell -a 'cat /etc/os-release'
il comando lancierà il comando bash cat /etc/os-release
(che ci consente di avere come output info sulla distribuzione linux) sul nodo remoto, che dovrebbe restituirci come output:
fin qua tutto perfetto, i comandi sopra ci confermano che la connettività è presente tra il control-node e il managed-node, poiché il test del ping pong e del recupero info da shell ci han restituito esito positivo.
Ansible - Creazione di un Playbook
In questa parte ci addentriamo, nel lato divertente di ansible i PlayBook
i PlayBook, sono dei file YAML che permettono di costruire dei task di automazione che ansbile può utilizzare per compiere azioni.
creeremo ora un playbook di esempio per installare vsftpd (servizio per creare server FTP /FTPS) sul nostro managed-node (192.168.8.120)
sotto il percorso /etc/ansible
creaimo la folder playbook
mkdir playbook && cd playbook
ora all'interno di questa cartella (che ospiterà tutti i PlayBook che creeremo in futuro) creiamo dunque un nuovo file avvalendoci sempre del nostro editor di testo nano
sudo nano vsftpd.yaml
nano ci aprirà un editor vuoto con caricato il nuovo file, inseriamo queste linee
---
- name: Playbook to Install FTP Server (vsftpd)
hosts: managed-node
tasks:
- name: Install vsftpd
package:
name: vsftpd
state: present
- name: Start vsftpd service
service:
name: vsftpd
state: started
enabled: yes
questo playbook installerà e attiverà il servizio vsftpd , nel playbook viene definito anche il nodo remoto su cui effettuare l'installazione:
hosts: managed-node
premiamo nuovamente CTRL+O
per salvare le modifiche e successivamente CTRL+X
per chiudere l'editor.
Siamo finalmente pronti a lanciare il nostro PlayBook, lanciamolo utilizzando il comando:
ansible-playbook vsftpd.yaml
che dovrebbe restituirci come output:
dove il risultato è visibile nella sezione PLAY RECAP con 3 ok in verde per ogni task compiuto dal PlayBook.
possiamo inoltre effettivamente verificare che il servizio si sia avviato corrrettamente sul nodo remoto, lanciando un'ulteriore comando ansible:
ansible managed-node -m shell -a 'systemctl status vsftpd'
se tutto è avvenuto con successo e l'installazione come da output precedente è andata a buon fine sul nodo remoto, ci aspettiamo il seguente output:
che ci conferma che il servizio è installato e attivo sul nostro managed-node (192.168.8.120)
Conclusioni
in questo articolo abbiamo visto passo per passo, come installare e configurare ansible sul control-node (base Fedora), come aggiugere e gestire un managed-node (base Fedora) effettuando autenticazione sullo stesso in modalità passwordless grazie alla chuiave ssh, abbiamo visto una panoramica dei comandi principali che ansible può eseguire e abbiammo creato ed eseguito un PlayBook.
per questo articolo è tutto, se avete dubbi o domande lascio aperta la sezione commenti.
Grazie per la lettura!!