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
- Instalarea sshpass pe Ubuntu/Debian
- Instalarea sshpass pe CentOS 8/RHEL 8
- Configurarea unui director de proiect Ansible
- Testing Password-Based SSH Login in Ansible
- Ansible Password-based SSH Login for Playbooks
- Ansible sudo Password Login for Playbooks
- Configurarea conectării automate la SSH pe bază de parolă și la sudo pe bază de parolă
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ă:
Acum, instalați sshpass prin următoarea comandă:
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:
În continuare, instalați pachetul depozitului EPEL prin intermediul următoarei comenzi:
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ă:
Instalați sshpass prin următoarea comandă:
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ă:
Navigați în directorul proiectului, după cum urmează:
Creați un fișier de inventariere a gazdelor, după cum urmează:
Creați un fișier de inventariere a gazdelor, după cum urmează:
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ă:
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ă:
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ă:
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ă:
Tastați următoarele linii în fișierul askpass1.yaml playbook file:
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ă:
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ă:
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ă:
Tăiați următoarele linii în fișierul askpass2.yaml.
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ă:
Scrieți următoarele coduri HTML în fișierul index.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ă:
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ă:
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ă:
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ă:
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!
.