Cum se utilizează autentificarea bazată pe parolă SSH în Ansible folosind sshpass

În acest articol, vă voi arăta cum să rulați playbook-uri Ansible folosind o autentificare bazată pe parolă SSH cu sshpass.

Precondiții

Dacă doriți să încercați exemplele discutate în acest articol,

1) Trebuie să aveți Ansible instalat pe computerul dumneavoastră.
2) Trebuie să aveți cel puțin o gazdă Ubuntu/Debian la care să vă puteți conecta din Ansible.

Există multe articole pe LinuxHint dedicate instalării Ansible. Puteți să le consultați dacă este nevoie pentru a instala programele necesare pe sistemul dumneavoastră.

De asemenea, va trebui să aveți instalat sshpass pe calculatorul dumneavoastră, unde ar trebui să aveți instalat Ansible. Vă voi arăta cum să instalați sshpass pe Ubuntu/Debian și CentOS/RHEL în acest articol. Nu vă faceți griji dacă nu aveți aceste programe deja instalate pe sistemul dumneavoastră.

Instalarea sshpass pe Ubuntu/Debian

Programul sshpass este disponibil în depozitul oficial de pachete al Ubuntu/Debian. Puteți instala cu ușurință acest program pe calculatorul dumneavoastră.

În primul rând, actualizați memoria cache a depozitului de pachete APT prin următoarea comandă:

$ sudo apt update

Acum, instalați sshpass prin următoarea comandă:

$ sudo apt install sshpass -y

sshpass ar trebui acum să fie instalat.

Instalarea sshpass pe CentOS 8/RHEL 8

sshpass este disponibil în depozitul EPEL al CentOS 8/RHEL 8. Trebuie să aveți depozitul EPEL activat pentru a instala sshpass.

În primul rând, actualizați memoria cache a depozitului de pachete DNF prin intermediul următoarei comenzi:

$ sudo dnf makecache

În continuare, instalați pachetul depozitului EPEL prin intermediul următoarei comenzi:

$ sudo dnf install epel-release -y

Pachetul de depozit EPEL ar trebui acum să fie instalat și depozitul EPEL ar trebui să fie activat.

Actualizați din nou memoria cache a depozitului de pachete DNF, după cum urmează:

$ sudo dnf makekecache

Instalați sshpass prin următoarea comandă:

$ sudo dnf install sshpass -y

sshpass ar trebui să fie instalat.

Configurarea unui director de proiect Ansible

Înainte de a merge mai departe, ar fi o idee bună să creăm o structură de directoare de proiect, doar pentru a păstra lucrurile un pic organizate.

Pentru a crea un director de proiect sshpass/ și toate subdirectoarele necesare (în directorul de lucru curent), rulați următoarea comandă:

$ mkdir -pv sshpass/{files,playbooks}

Navigați în directorul proiectului, după cum urmează:

$ cd sshpass/

Creați un fișier de inventariere a gazdelor, după cum urmează:

$ cd sshpass/

Creați un fișier de inventariere a gazdelor, după cum urmează:

$ nano hosts

Adaugați IP-ul gazdei dvs. sau numele DNS în fișierul de inventariere.

După ce ați terminat cu acest pas, salvați fișierul apăsând <Ctrl> + X, urmat de Y și <Enter>.

Crearea unui fișier de configurare Ansible în directorul proiectului, după cum urmează:

$ nano ansible.cfg

Acum, tastați următoarele linii în fișierul ansible.cfg.

După ce ați terminat cu acest pas, salvați fișierul apăsând <Ctrl> + X, urmat de Y și <Enter>.

Testing Password-Based SSH Login in Ansible

În continuare, încercați să efectuați ping la gazdele din fișierul de inventar, după cum urmează:

$ ansible all -u shovon -m ping

NOTA: Aici, opțiunea -u este utilizată pentru a-i spune lui ansible cu ce utilizator să se conecteze. În acest caz, acesta va fi utilizatorul shovon. Înlocuiți acest nume de utilizator cu al dumneavoastră de acum încolo, pe tot parcursul demonstrației.

După cum puteți vedea, nu sunt capabil să mă conectez la gazdă și să execut nicio comandă.

Pentru a forța Ansible să ceară parola utilizatorului, rulați comanda ansible cu argumentul -ask-pass, după cum urmează:

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

Cum puteți vedea, Ansible cere parola SSH a utilizatorului. Acum, introduceți parola SSH (parola de conectare a utilizatorului) și apăsați <Enter>.

Hosta poate fi pingată, după cum urmează:

Ansible Password-based SSH Login for Playbooks

Ansible Password-based SSH Login for Playbooks

Puteți utiliza un login SSH bazat pe parolă atunci când executați playbook-uri Ansible. Să ne uităm la un exemplu.

În primul rând, creați un nou playbook askpass1.yaml în directorul playbooks/, după cum urmează:

$ nano playbooks/askpass1.yaml

Tastați următoarele linii în fișierul askpass1.yaml playbook file:

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

După ce ați terminat cu acest pas, salvați fișierul apăsând <Ctrl> + X, urmat de Y și <Enter>.

Executați playbook-ul askpass1.yaml, după cum urmează:

$ ansible-playbook playbooks/askpass1.yaml

După cum puteți vedea, nu sunt capabil să mă conectez la gazdă. Puteți vedea că acest lucru se datorează faptului că nu am rulat comanda ansible-playbook cu opțiunea -ask-pass.

Rulați comanda askpass1.yaml playbook cu opțiunea -ask-pass, după cum urmează:

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

După cum puteți vedea, Ansible cere o parolă SSH. Introduceți parola SSH și apăsați <Enter>.

Cartea de joc askpass1.yaml ar trebui să ruleze acum cu succes.

Ansible sudo Password Login for Playbooks

Opțiunea -ask-pass va cere doar parola de conectare SSH. Ce se întâmplă dacă doriți să introduceți și parola sudo? Veți vedea cum să faceți acest lucru în următorii pași.

În primul rând, creați un nou playbook askpass2.yaml în directorul playbooks/, după cum urmează:

$ nano playbooks/askpass2.yaml

Tăiați următoarele linii în fișierul 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
– name: Copy index.html file to server
copy:
src: ../files/index.html
dest: /var/www/html/index.html
mode: 0644
owner: www-data
group: www-data

Aici, am folosit comanda become: True pentru a-i spune lui Ansible să ruleze acest playbook cu privilegii sudo. După ce ați terminat cu acest pas, salvați fișierul askpass2.yaml apăsând <Ctrl> + X, urmat de Y și <Enter>.

Crearea unui index.html în directorul files/, după cum urmează:

$ nano files/index.html

Scrieți următoarele coduri HTML în fișierul index.html:

<!DOCTYPE html>
<html>
<head>
<title>Homepage</title>
</head>
<body>
<h1>Hello World</h1>
<p>Funcționează</p>
</body>
</html>

După ce ați terminat cu acest pas, salvați fișierul apăsând <Ctrl> + X urmat de Y și <Enter>.

Puteți rula playbook-ul askpass2.yaml cu opțiunea -ask-pass, după cum urmează:

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

Apoi vi se va cere parola SSH, ca și înainte.

Dar este posibil ca playbook-ul să nu ruleze chiar dacă furnizați parola SSH. Motivul pentru aceasta este că trebuie să-i spuneți lui Ansible să ceară parola sudo, precum și parola SSH.

Puteți să-i spuneți lui Ansible să ceară parola sudo folosind opțiunea -ask-become-pass în timp ce rulați playbook-ul, după cum urmează:

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

Acum, Ansible vă va cere parola SSH.

În continuare, Ansible vă va cere parola sudo. Dacă parola sudo este aceeași cu parola SSH (ceea ce este cel mai probabil), atunci lăsați-o goală și apăsați <Enter>.

După cum puteți vedea, playbook-ul a rulat cu succes.

Configurarea conectării automate la SSH pe bază de parolă și la sudo pe bază de parolă

Poate că doriți să folosiți conectarea la SSH și sudo pe bază de parolă, dar nu doriți să tastați parola SSH și parola sudo de fiecare dată când executați un playbook. Dacă acesta este cazul, atunci această secțiune este pentru dumneavoastră.

Pentru a utiliza autentificarea SSH și autentificarea sudo pe bază de parolă fără a vi se solicita parolele, tot ce trebuie să faceți este să adăugați variabilele gazdă ansible_ssh_pass și ansible_become_pass sau variabilele de grup ansible_ssh_pass în fișierul dumneavoastră de inventar.

În primul rând, deschideți fișierul de inventariere a gazdelor, după cum urmează:

$ nano hosts

Dacă aveți mai multe gazde în fișierul de inventariere și fiecare dintre gazde are parole diferite, atunci adăugați variabilele ansible_ssh_pass și ansible_become_pass ca variabile de gazdă (după fiecare gazdă) după cum urmează.

Asigurați-vă că înlocuiți secret cu parola dvs. SSH și sudo.

Dacă toate sau unele dintre gazde au aceeași parolă, atunci puteți adăuga variabilele ansible_ssh_pass și ansible_become_pass ca variabile de grup, așa cum se arată în exemplul de mai jos.

Aici, am doar o singură gazdă, așa că am adăugat variabilele ansible_ssh_pass și ansible_become_pass pentru grupul all (toate gazdele din fișierul de inventar). Dar, puteți adăuga aceste variabile și pentru alte grupuri specifice.

După ce ați terminat de adăugat variabilele ansible_ssh_pass și ansible_become_pass în fișierul de inventariere a gazdelor, salvați fișierul de inventariere a gazdelor apăsând <Ctrl> + X, urmat de Y și <Enter>.

Acum puteți rula fișierul askpass2.yaml playbook, după cum urmează:

$ ansible-playbook playbooks/askpass2.yaml

După cum puteți vedea, playbook-ul a rulat cu succes, deși nu a cerut parola SSH sau parola sudo.

Atunci, acesta este modul în care utilizați sshpass pentru conectarea SSH bazată pe parolă și sudo în Ansible. Vă mulțumim că ați citit acest articol!

.