Ansible Ubuntu · 11 min read · Dec 20, 2025

Come installare e configurare Ansible su Ubuntu 22.04

Ansible è uno strumento di gestione della configurazione molto popolare progettato per semplificare il processo di controllo di un gran numero di server. Può automatizzare il processo di configurazione di nuovi server e installazione di applicazioni con un singolo comando o file. Puoi controllare quanti più server possibile e eseguire processi su di essi simultaneamente da un singolo nodo. Ansible non richiede alcun software speciale da installare sui nodi server e può controllarli tramite SSH.

In questa guida, impareremo come installare e configurare Ansible su un server Ubuntu 22.04.

Prerequisiti

  • Due o più sistemi server che eseguono Ubuntu 22.04 con server OpenSSH installato.
  • Sia il server che i nodi sono accessibili tramite indirizzi IP pubblici.
  • Un utente non root con privilegi sudo è configurato sul server Ansible e un utente root con una password è configurato sui client Ansible.

Passo 1 - Installare Ansible

Utilizzeremo il repository ufficiale di Ansible per installare la sua ultima versione. Aggiungi il repository ufficiale di Ansible al server.

$ sudo add-apt-repository ppa:ansible/ansible

Fortunatamente, Ubuntu fornisce Ansible 2.9 che è ciò che installeremo. Esegui il seguente comando per installare Ansible.

$ sudo apt install ansible -y

Testa la tua installazione eseguendo il seguente comando.

$ ansible --version
ansible [core 2.13.3rc1]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/navjot/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  ansible collection location = /home/navjot/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.10.4 (main, Jun 29 2022, 12:14:53) [GCC 11.2.0]
  jinja version = 3.0.3
  libyaml = True

Installa e attiva il pacchetto python3-argcomplete per impostare il supporto per il completamento bash di Ansible.

$ sudo apt install python3-argcomplete
$ sudo activate-global-python-argcomplete3

Ora puoi premere il tasto Tab per ottenere un elenco di opzioni per la shell bash.

Passo 2 - Configurare il file di inventario

Per poter connettersi a più host, hai bisogno di un file che registri i dettagli dei nodi. Questo file è chiamato file di inventario.

A seconda di quanti server desideri controllare, il file di inventario di Ansible ti consente anche di organizzarli in gruppi e sottogruppi. Puoi anche impostare variabili personalizzate applicabili a host o gruppi selezionati che possono essere ulteriormente utilizzate durante il passaggio delle istruzioni.

Ansible fornisce un file di inventario predefinito disponibile in /etc/ansible/hosts. Aprilo con l’editor Nano.

$ sudo nano /etc/ansible/hosts

Incolla il seguente codice in fondo al file.

[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113

[all:vars]
ansible_python_interpreter=/usr/bin/python3

La sezione servers definisce l’elenco dei nodi a cui desideri connetterti. Puoi creare quanti più gruppi per organizzare i server in più gruppi.

Il gruppo all:vars imposta il parametro ansible_python_interpreter su tutti gli host nell’inventario. Assicura che Ansible utilizzi l’eseguibile Python 3 invece di Python 2, che è stato rimosso dalle versioni recenti di Ubuntu.

Quando hai finito, salva il file premendo Ctrl + X e inserendo Y quando ti viene chiesto di confermare le modifiche.

Nota: Puoi anche creare il tuo file di inventario in qualsiasi posizione di tua scelta che puoi poi passare utilizzando il parametro -i durante l’esecuzione dei comandi Ansible.

Puoi controllare l’elenco del tuo inventario con il seguente comando.

$ ansible-inventory --list -y
all:
  children:
    servers:
      hosts:
        server1:
          ansible_host: 203.0.113.111
          ansible_python_interpreter: /usr/bin/python3
        server2:
          ansible_host: 203.0.113.112
          ansible_python_interpreter: /usr/bin/python3
        server3:
          ansible_host: 203.0.113.113
          ansible_python_interpreter: /usr/bin/python3
    ungrouped: {}

Organizzare i server in gruppi e sottogruppi

Questo è un utile suggerimento se hai molti server con alcuni server che svolgono funzioni specifiche. Ad esempio, puoi utilizzare questo metodo per raggruppare i server web e i server di database separatamente. Puoi anche rendere un host parte di più gruppi. Per ottenere ciò, il tuo file di inventario dovrebbe apparire come il seguente.

[webservers]
203.0.113.111
203.0.113.112

[dbservers]
203.0.113.113
server_hostname

[development]
203.0.113.111
203.0.113.113

[production]
203.0.113.112
server_hostname

Passo 3 - Configurare le chiavi SSH

Affinché Ansible possa connettersi ai server, devi configurare le chiavi SSH tra il tuo server Ansible e gli host specificati nel file di inventario. Questo funzionerà solo se i client Ansible non hanno una chiave pubblica abilitata e hanno un account root abilitato con una password.

Utilizza i seguenti passaggi per creare e configurare una chiave SSH per Ansible e i suoi nodi.

Crea la chiave per Ansible.

$ ssh-keygen -t rsa -b 4096 -C "Chiave Ansible"

Copia la chiave pubblica nei tuoi account sui server remoti. Per questo, utilizzeremo il comando ssh-copy-id.

$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]

Questo è tutto. Ora Ansible dovrebbe essere in grado di comunicare con i tuoi server.

Configurare le chiavi SSH sui nodi con chiave pubblica esistente

Se i client hanno già le chiavi pubbliche abilitate, dovrai seguire alcuni passaggi extra. Per questo, devi creare un nuovo utente accessibile solo da Ansible su ogni server nodo. Quell’utente avrà privilegi sudo accessibili senza password e potrà essere accessibile solo dal tuo server ansible.

Per creare un utente ansible, esegui il seguente comando.

$ sudo adduser ansible

Scegli una password forte e lascia vuoti tutti gli altri campi.

Ora, configura l’accesso sudo senza password per questo utente tramite il seguente comando.

$ echo "ansible ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ansible

Ora che hai aggiunto e configurato il nuovo utente, puoi copiare la chiave SSH dal tuo server ansible al server nodo utilizzando il seguente comando.

$ ssh-copy-id [email protected]

Ti verrà chiesta una password per l’utente ansible. Inseriscila e la chiave SSH verrà copiata.

Successivamente, disabilita il login basato su password per l’utente ansible sul server nodo.

$ sudo usermod -L ansible

Ora, il tuo server nodo è accessibile solo dal server Ansible poiché solo quel server ha la chiave pubblica per esso e non puoi usarlo con privilegi sudo sul server nodo direttamente poiché il login con password è disabilitato.

Dovrai ripetere questi passaggi per ogni server nodo. Inoltre, sostituisci l’utente root con l’utente ansible in questo tutorial.

Passo 4 - Testare la connessione

Dopo aver configurato il file di inventario e le chiavi SSH, dovremmo controllare se Ansible può connettersi ai server.

Digita il seguente comando per controllare la connessione. Questo comando testerà la connessione a tutti i server dal file di inventario.

$ ansible all -m ping -u root

Questo comando utilizza il modulo ping di Ansible per eseguire un test di connettività su tutti i server. Dovresti ottenere un output simile al seguente.

server1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
server2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
server3 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Se è la prima volta che utilizzi Ansible, ti verrà chiesto di confermare l’autenticità di tutti i server. Quando ti viene chiesto, digita yes e premi ENTER per confermare.

Passo 5 - Eseguire alcuni comandi di base

Eseguiamo alcuni comandi di base sui server utilizzando Ansible. Per eseguire un comando sul server, viene utilizzato il seguente formato.

$ ansible all -a "comando" -u 

Controllare l’uso del disco

Per prima cosa, controlliamo l’uso del disco su tutti i nostri server.

$ ansible all -a "df -h" -u root
server1 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           198M  972K  197M   1% /run
/dev/sda2        50G  3.9G   44G   9% /
tmpfs           989M     0  989M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           198M  4.0K  198M   1% /run/user/1000

server2 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           198M  922K  197M   1% /run
/dev/sda2        50G  4.9G   43G  10% /
tmpfs           989M     0  989M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           198M  4.0K  198M   1% /run/user/1000

Targeting host e gruppi individuali

Fino ad ora, stavamo eseguendo comandi su tutti i server remoti contemporaneamente. Ma non è sempre così. Per eseguire un comando su un solo server, dovresti utilizzare il seguente formato.

$ ansible server1 -a "uptime" -u root
server1 | CHANGED | rc=0 >>
 21:38:26 up 11 min,  2 users,  load average: 0.00, 0.20, 0.19

Il comando sopra controlla l’uptime su server1 dal gruppo di inventario.

Puoi anche mirare a più server utilizzando il seguente formato.

$ ansible server1:server2 -m ping -u root

Puoi anche mirare a gruppi o sottogruppi direttamente dal file di inventario.

$ ansible groupname -m ping -u 

Aggiornare tutti i server

Per questo tutorial, stiamo assumendo che tutti i server remoti stiano eseguendo il sistema operativo Debian o Ubuntu.

Esegui il seguente comando per aggiornare il software su tutti i tuoi server.

$ ansible all -m apt -a "update_cache=yes upgrade=yes" -u root

Il parametro -m definisce il modulo che Ansible deve eseguire. Il parametro -a si riferisce agli argomenti o ai comandi per il modulo associato. Qui, stiamo utilizzando il modulo apt di Ansible per aggiornare i server proprio come abbiamo utilizzato il modulo ping nel nostro ultimo esempio. L’update_cache aggiorna la cache APT sul server e upgrade=yes dice ad Ansible di eseguire il comando apt upgrade.

Se stai utilizzando l’utente ansible come documentato sopra, devi modificare il comando ansible per eseguire con privilegi sudo elevati.

$ ansible server2 -m apt -a "update_cache=yes upgrade=yes" -K -b -u ansible

Qui, -K chiede una password per l’escalation dei privilegi. -b esegue l’operazione ansible con become che ti consente di essere un altro utente. Entrambe le variabili combinate consentono ad ansible di eseguire con privilegi sudo elevati. Dovrai utilizzare questo per tutti i comandi che richiedono privilegi sudo.

A volte, alcuni di questi comandi di aggiornamento possono richiedere un riavvio, quindi esegui il seguente comando per riavviare tutti i tuoi server.

$ ansible all -a "reboot" -u root

Questi erano solo alcuni dei comandi di base che puoi eseguire utilizzando Ansible.

Passo 6 - Introduzione ai Playbook

I comandi sopra ti consentono di eseguire attività una tantum, ma se desideri configurare più server o eseguire la stessa sequenza di comandi su più server, devi impostare i playbook. I playbook sono file scritti in YAML e contengono istruzioni per automatizzare una sequenza di attività per la configurazione di applicazioni e servizi.

Ora creeremo un playbook per installare Nginx e impostare una pagina HTML sul nodo Ansible. Crea una directory per Ansible nella tua home directory.

$ mkdir ~/ansible

Crea e apri il file del playbook per la modifica.

$ cd ~/ansible
$ nano testplaybook.yml

I playbook utilizzano il formato YAML per definire uno o più play. Un play è un insieme di attività ordinate disposte in modo da automatizzare un processo. I play sono definiti come un elenco YAML.

Il primo passo per definire un play è determinare quali host sono il target utilizzando la direttiva hosts: all. La direttiva become viene utilizzata per indicare che le attività seguenti devono essere eseguite da un superutente.

Definiremo tre attività: una per aggiungere un utente, una per aggiornare tutti i pacchetti e l’ultima per installare il server Nginx. La sezione vars del playbook viene utilizzata per definire variabili personalizzate. Definiamo due variabili, una per l’utente che dobbiamo aggiungere e la seconda per definire lo stato del pacchetto che dobbiamo installare. Per utilizzare la variabile, dobbiamo racchiudere il nome della variabile tra doppie parentesi graffe.

Il modulo ansible.builtin.user viene utilizzato per aggiungere un nuovo utente con privilegi sudo. Per aggiungere l’utente, stiamo utilizzando le variabili name, password e group. La variabile group è impostata su sudo per dare permessi di superutente all’utente. Non puoi mettere la password in chiaro nel file del playbook, quindi aggiungeremo un segreto hashato SHA. Utilizzeremo l’utilità mkpasswd per questo. Per installarlo, esegui il seguente comando per installare il pacchetto whois.

$ sudo apt install whois

Genera la password hashata. Ti verrà chiesta la solita password e ti verrà fornita una stringa hashata per essa. Annotati la chiave hashata da utilizzare nel file del playbook.

$ mkpasswd --method=sha-512
Password:
$6$dGbprm2oVqClDDDh$Epk6r5eXYkYBaQpQpP.H7VCdz0g9Aj0aO8hjy/WXq4WmfQ7GvQP2/cl/cNhd7.LRFuCKix9uCF2t8X5/Pv0Lk1

La direttiva update_cache serve per aggiornare l’elenco dei repository del sistema proprio come il comando apt update e la direttiva upgrade: dist dice ad Ansible di eseguire l’aggiornamento del sistema. La terza attività è autoesplicativa, che installa l’ultima versione del server Nginx.

Basato sulle informazioni di cui abbiamo discusso, incolla il seguente codice nel file. Incolla la chiave hashata che hai ottenuto come valore per la variabile password.

---
- name: Test playbook
  hosts: all
  become: true
  vars:
      state: latest
      user: navjot
  tasks:
  - name: Aggiungi l'utente {{ user }}
    ansible.builtin.user:
      name: "{{ user }}"
      password: '$6$dGbprm2oVqClDDDh$Epk6r5eXYkYBaQpQpP.H7VCdz0g9Aj0aO8hjy/WXq4WmfQ7GvQP2/cl/cNhd7.LRFuCKix9uCF2t8X5/Pv0Lk1'
      group: sudo
  - name: Aggiorna tutti i pacchetti apt
    apt:
      update_cache: yes
      upgrade: dist
  - name: Installa il {{ state }} del pacchetto "nginx"
    apt:
      name: "nginx"
      state: "{{ state }}"

Salva il file premendo Ctrl + X e inserendo Y quando ti viene chiesto di confermare le modifiche.

Per eseguire il playbook, esegui il seguente comando. Il flag --ask-become-pass chiederà la tua password di root per eseguire un’operazione elevata.

$ ansible-playbook testplaybook.yml --ask-become-pass

Otterrai il seguente output.

BECOME password:

PLAY [Test playbook] *************************************************************************************************

TASK [Gathering Facts] *********************************************************************************************
ok: [server1]
ok: [server2]
ok: [server3]

TASK [Add the user casablanca] *************************************************************************************
changed: [server3]
changed: [server2]
changed: [server1]

TASK [Upgrade all apt packages] ************************************************************************************
changed: [server1]
changed: [server2]
changed: [server3]

TASK [Install the latest of package "nginx"] ***********************************************************************
changed: [server3]
changed: [server2]
changed: [server1]

PLAY RECAP ***********************************************************************************************************
server1                    : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
server2                    : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
server3                    : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Questo conferma che il tuo playbook è stato eseguito con successo.

Se stai utilizzando un file di inventario personalizzato, devi includere la posizione del file nel comando come segue.

$ ansible-playbook -i /etc/ansible/custominventory testplaybook.yml --ask-become-pass 

Conclusione

Questo conclude il nostro tutorial su come installare e configurare Ansible su un server Ubuntu 22.04. Se hai domande, postale nei commenti qui sotto.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.