Come usare il login basato su password SSH in Ansible usando sshpass

In questo articolo, ti mostrerò come eseguire i playbook Ansible usando un login basato su password SSH con sshpass.

Prequisiti

Se vuoi provare gli esempi discussi in questo articolo,

1) Devi avere Ansible installato sul tuo computer.
2) Devi avere almeno un host Ubuntu/Debian a cui ti puoi connettere da Ansible.

Ci sono molti articoli su LinuxHint dedicati all’installazione di Ansible. Puoi controllarli se necessario per installare i programmi necessari sul tuo sistema.

Avrai anche bisogno di avere sshpass installato sul tuo computer, dove dovresti avere installato Ansible. Vi mostrerò come installare sshpass su Ubuntu/Debian e CentOS/RHEL in questo articolo. Non preoccupatevi se non avete questi programmi già installati sul vostro sistema.

Installazione di sshpass su Ubuntu/Debian

Il programma sshpass è disponibile nel repository ufficiale dei pacchetti di Ubuntu/Debian. Puoi facilmente installare questo programma sul tuo computer.

Prima, aggiorna la cache del repository dei pacchetti APT tramite il seguente comando:

$ sudo apt update

Ora, installa sshpass tramite il seguente comando:

$ sudo apt install sshpass -y

sshpass dovrebbe ora essere installato.

Installazione di sshpass su CentOS 8/RHEL 8

sshpass è disponibile nel repository EPEL di CentOS 8/RHEL 8. Devi avere il repository EPEL abilitato per installare sshpass.

Prima di tutto, aggiorna la cache del repository dei pacchetti DNF tramite il seguente comando:

$ sudo dnf makecache

In seguito, installa il pacchetto del repository EPEL tramite il seguente comando:

$ sudo dnf install epel-release -y

Il pacchetto EPEL repository dovrebbe ora essere installato e il repository EPEL dovrebbe essere abilitato.

Aggiorna nuovamente la cache del repository dei pacchetti DNF, come segue:

$ sudo dnf makecache

Installa sshpass tramite il seguente comando:

$ sudo dnf install sshpass -y

sshpass dovrebbe essere installato.

Impostare una directory di progetto Ansible

Prima di andare avanti, sarebbe una buona idea creare una struttura di directory di progetto, giusto per mantenere le cose un po’ organizzate.

Per creare una directory di progetto sshpass/ e tutte le sottodirectory necessarie (nella directory di lavoro corrente), eseguire il seguente comando:

$ mkdir -pv sshpass/{files,playbooks}

Passa alla directory del progetto, come segue:

$ cd sshpass/

Crea un file di inventario hosts, come segue:

$ nano hosts

Aggiungi il tuo host IP o nome DNS nel file di inventario.

Una volta finito questo passo, salva il file premendo <Ctrl> + X, seguito da Y e <Enter>.

Crea un file di configurazione Ansible nella directory del progetto, come segue:

$ nano ansible.cfg

Ora, digita le seguenti righe nel file ansible.cfg.

Una volta finito questo passaggio, salva il file premendo <Ctrl> + X, seguito da Y e <Enter>.

Testing Password-Based SSH Login in Ansible

Prossimo, prova a fare un ping agli host nel file di inventario, come segue:

$ ansible all -u shovon -m ping

NOTA: Qui, l’opzione -u è usata per dire ad ansible quale utente accedere come. In questo caso, sarà l’utente shovon. Sostituisci questo nome utente con il tuo d’ora in poi, per tutta la dimostrazione.

Come puoi vedere, non sono in grado di accedere all’host ed eseguire alcun comando.

Per forzare Ansible a chiedere la password dell’utente, esegui il comando ansible con l’argomento -ask-pass, come segue:

$ ansible all -u shovon –ask-pass -m ping

Come puoi vedere, Ansible chiede la password SSH dell’utente. Ora, digita la tua password SSH (password di accesso dell’utente) e premi <Invio>.

L’host può essere pingato, come segue:

Ansible Login SSH basato su password per Playbooks

Puoi usare un login SSH basato su password quando esegui i playbooks di Ansible. Vediamo un esempio.

Primo, crea un nuovo playbook askpass1.yaml nella directory playbooks/, come segue:

$ nano playbooks/askpass1.yaml

Tipo le seguenti righe nel file askpass1.yaml playbook file:

– hosts: all
user: shovon
tasks:
– name: Ping all hosts
ping:
– name: Print a message
debug:
msg: ‘All set’

Una volta finito questo passo, salva il file premendo <Ctrl> + X, seguito da Y e <Enter>.

Esegui il playbook askpass1.yaml, come segue:

$ ansible-playbook playbooks/askpass1.yaml

Come puoi vedere, non sono capace di connettermi all’host. Puoi vedere che questo è perché non ho eseguito il comando ansible-playbook con l’opzione -ask-pass.

Esegui il comando askpass1.yaml con l’opzione -ask-pass, come segue:

$ ansible-playbook -ask-pass playbooks/askpass1.yaml

Come puoi vedere, Ansible sta chiedendo una password SSH. Digita la tua password SSH e premi <Invio>.

Il playbook askpass1.yaml dovrebbe ora essere eseguito con successo.

Ansible sudo Password Login for Playbooks

L’opzione -ask-pass chiederà solo la password di accesso SSH. Cosa succede se vuoi digitare anche la password di sudo? Vedrai come farlo nei prossimi passi.

Primo, crea un nuovo playbook askpass2.yaml nella directory playbooks/, come segue:

$ nano playbooks/askpass2.yaml

Tipo le seguenti righe nel file askpass2.yaml.

– hosts: all
user: shovon
become: True
tasks:
– name: Install apache2 Package
apt:
name: apache2
state: latest
– name: Make sure apache2 service is running
service:
name: apache2
state: started
enabled: True
– nome: Copia file index.html sul server
copy:
src: ../files/index.html
dest: /var/www/html/index.html
mode: 0644
proprietario: www-data
gruppo: www-data

Qui ho usato il comando become: True per dire ad Ansible di eseguire questo playbook con i privilegi di sudo. Una volta finito questo passo, salva il file askpass2.yaml premendo <Ctrl> + X, seguito da Y e <Enter>.

Crea un file index.html nella directory files/, come segue:

$ nano files/index.html

Digita i seguenti codici HTML nel file index.html:

<!DOCTYPE html>
<html>
<head>
<title>Homepage</title>
</head>
<body>
<h1>Hello World</h1>
<p>Funziona</p>
</body>
</html>

Una volta finito questo passo, salva il file premendo <Ctrl> + X seguito da Y e <Enter>.

Puoi eseguire il playbook askpass2.yaml con l’opzione -ask-pass, come segue:

$ ansible-playbook –ask-pass playbooks/askpass2.yaml

Vi verrà chiesta la password SSH, come prima.

Ma il playbook potrebbe non essere eseguito anche se fornite la password SSH. La ragione di questo è che devi dire ad Ansible di chiedere la password di sudo, così come la password SSH.

Puoi dire ad Ansible di chiedere la password di sudo usando l’opzione -ask-become-pass mentre esegui il playbook, come segue:

$ ansible-playbook –ask-pass –ask-become-pass playbooks/askpass2.yaml

Ora, Ansible ti chiederà la password SSH.

In seguito, Ansible ti chiederà la password sudo. Se la tua password sudo è la stessa della password SSH (il che è molto probabile), allora lasciala vuota e premi <Invio>.

Come puoi vedere, il playbook è stato eseguito con successo.

Configurare il login automatico SSH basato su password e il login con password sudo

Potresti voler usare il login SSH e sudo basato su password, ma non voler digitare la password SSH e sudo ogni volta che esegui una playbook. Se questo è il caso, allora questa sezione è per te.

Per usare il login SSH e sudo basato su password senza che ti vengano richieste le password, tutto quello che devi fare è aggiungere le variabili host ansible_ssh_pass e ansible_become_pass o le variabili di gruppo nel tuo file di inventario.

Primo, apri il file di inventario degli host, come segue:

$ nano hosts

Se hai più host nel tuo file di inventario e ognuno degli host ha password diverse, allora aggiungi le variabili ansible_ssh_pass e ansible_become_pass come variabili host (dopo ogni host) come segue.

Assicurati di sostituire secret con la tua password SSH e sudo.

Se tutti o alcuni degli host hanno la stessa password, allora puoi aggiungere le variabili ansible_ssh_pass e ansible_become_pass come variabili di gruppo, come mostrato nell’esempio seguente.

Qui, ho solo un host, quindi ho aggiunto le variabili ansible_ssh_pass e ansible_become_pass per il gruppo all (tutti gli host nel file di inventario). Ma, puoi aggiungere queste variabili anche per altri gruppi specifici.

Una volta che hai finito di aggiungere le variabili ansible_ssh_pass e ansible_become_pass nel file di inventario degli host, salva il file di inventario degli host premendo <Ctrl> + X, seguito da Y e <Enter>.

Puoi ora eseguire il playbook askpass2.yaml, come segue:

$ ansible-playbook playbooks/askpass2.yaml

Come puoi vedere, il playbook è stato eseguito con successo, anche se non ha chiesto la password SSH o la password sudo.

Quindi, questo è come usare sshpass per il login SSH e sudo con password in Ansible. Grazie per aver letto questo articolo!