How to Use SSH Password-Based Login in Ansible Using sshpass

Ez a cikk megmutatja, hogyan futtathatjuk az Ansible playbookokat SSH jelszó alapú bejelentkezéssel az sshpass segítségével.

Előfeltételek

Ha ki szeretné próbálni az ebben a cikkben tárgyalt példákat,

1) A számítógépére telepíteni kell az Ansible-t.
2) Legalább egy Ubuntu/Debian állomással kell rendelkeznie, amelyre az Ansible-ból csatlakozni tud.

A LinuxHint oldalon számos cikk foglalkozik az Ansible telepítésével. Ezeket megnézheted, ha szükséges, hogy a szükséges programokat telepítsd a rendszeredre.

A gépedre, ahová az Ansible-t telepíteni kell, telepíteni kell az sshpass-t is. Ebben a cikkben megmutatom, hogyan kell telepíteni az sshpass-t Ubuntu/Debian és CentOS/RHEL rendszerekre. Ne aggódjon, ha ezek a programok még nincsenek telepítve a rendszerére.

A sshpass telepítése Ubuntun/Debianon

A sshpass program elérhető az Ubuntu/Debian hivatalos csomagtárában. Ezt a programot könnyedén telepítheti a számítógépére.

Először frissítse az APT csomagtároló gyorsítótárát a következő paranccsal:

$ sudo apt update

Most telepítse az sshpass-t a következő paranccsal:

$ sudo apt install sshpass -y

az sshpass-nak most már telepítve kell lennie.

A sshpass telepítése CentOS 8/RHEL 8-ra

sshpass elérhető a CentOS 8/RHEL 8 EPEL tárolójában. Az sshpass telepítéséhez engedélyezve kell lennie az EPEL-tárnak.

Először frissítse a DNF csomagtároló gyorsítótárát a következő paranccsal:

$ sudo dnf makecache

Majd telepítse az EPEL csomagtároló csomagját a következő paranccsal:

$ sudo dnf install epel-release -y

Az EPEL tárolócsomagnak most már telepítve kell lennie, és az EPEL tárolónak engedélyezve kell lennie.

Folyamatosan frissítse újra a DNF csomagtároló gyorsítótárát az alábbiak szerint:

$ sudo dnf makecache

Telepítse az sshpass-t a következő paranccsal:

$ sudo dnf install sshpass -y

sshpass kell telepíteni.

Az Ansible projektkönyvtár beállítása

Mielőtt továbblépnénk, jó ötlet lenne létrehozni egy projektkönyvtár struktúrát, csak hogy egy kicsit rendezettek legyenek a dolgok.

Az sshpass/ projektkönyvtár és az összes szükséges alkönyvtár létrehozásához (az aktuális munkakönyvtárunkban) futtassuk a következő parancsot:

$ mkdir -pv sshpass/{files,playbooks}

Navigáljon a projektkönyvtárba az alábbiak szerint:

$ cd sshpass/

Készítsen egy hosts inventory fájlt az alábbiak szerint:

$ nano hosts

Adja hozzá a leltárfájlban az állomás IP- vagy DNS-nevét.

Ha ezzel a lépéssel végzett, mentse el a fájlt a <Ctrl> + X, majd az Y és az <Enter> billentyűkombinációval.

Hozzon létre egy Ansible konfigurációs fájlt a projektkönyvtárban az alábbiak szerint:

$ nano ansible.cfg

Ezután írja be a következő sorokat az ansible.cfg fájlba.

Ha ezzel a lépéssel végzett, mentse a fájlt a <Ctrl> + X, majd az Y és az <Enter> billentyűkombinációval.

Teszting Password-Based SSH Login in Ansible in Ansible

Következő lépésként próbálja meg pingelni a leltárfájlban szereplő hosztokat az alábbiak szerint:

$ ansible all -u shovon -m ping

MEGJEGYZÉS: Itt a -u opciót arra használjuk, hogy megmondjuk az ansible-nak, hogy melyik felhasználóként jelentkezzen be. Ebben az esetben ez a shovon felhasználó lesz. Ezt a felhasználónevet mostantól kezdve a demó során végig a tiéddel helyettesítsd.

Amint láthatod, nem tudok bejelentkezni a hosztra, és nem tudok semmilyen parancsot futtatni.

Hogy az Ansible rákényszerítse a felhasználó jelszavának elkérésére, futtassa az ansible parancsot a -ask-pass argumentummal a következőképpen:

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

Mint látható, az Ansible elkéri a felhasználó SSH jelszavát. Most írja be az SSH jelszavát (a felhasználó bejelentkezési jelszavát), és nyomja meg az <Enter> billentyűt.

A hoszt a következőképpen pingelhető:

Ansible Jelszó alapú SSH bejelentkezés a playbookokhoz

Az Ansible playbookok futtatásakor jelszó alapú SSH bejelentkezést használhat. Nézzünk egy példát.

Először hozzon létre egy új playbook askpass1.yaml-t a playbooks/ könyvtárban az alábbiak szerint:

$ nano playbooks/askpass1.yaml

Az askpass1-be írja be a következő sorokat.yaml playbook fájl:

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

Ha ezzel a lépéssel végeztél, mentsd el a fájlt a <Ctrl> + X, majd az Y és az <Enter> billentyűkombinációval.

Futtassuk az askpass1.yaml playbookot a következőképpen:

$ ansible-playbook playbooks/askpass1.yaml

Mint láthatjuk, nem tudok csatlakozni a hosthoz. Láthatja, hogy ez azért van, mert nem futtattam az ansible-playbook parancsot a -ask-pass opcióval.

Futtassa az askpass1.yaml playbookot a -ask-pass opcióval az alábbiak szerint:

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

Amint látható, az Ansible kéri az SSH jelszót. Írja be az SSH jelszavát, és nyomja meg a <Enter> billentyűt.

A playbook askpass1.yaml most már sikeresen fut.

Ansible sudo Password Login for Playbooks

Az -ask-pass opció csak az SSH bejelentkezési jelszót fogja kérni. Mi van akkor, ha a sudo jelszót is be szeretné írni? A következő lépésekben látni fogja, hogyan teheti ezt meg.

Először is hozzon létre egy új playbook askpass2.yaml-t a playbooks/ könyvtárban a következőképpen:

$ nano playbooks/askpass2.yaml

Az askpass2.yaml fájlba írja be a következő sorokat.

– 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:
– name: Index.html fájl másolása a szerverre
copy:
src: ../files/index.html
dest: /var/www/html/index.html
mode: 0644
tulajdonos: www-data
csoport: www-data

Itt a become parancsot használtam: True, hogy megmondjam az Ansible-nak, hogy ezt a playbookot sudo jogosultságokkal futtassa. Ha ezzel a lépéssel végeztünk, mentsük el az askpass2.yaml fájlt a <Ctrl> + X, majd az Y és az <Enter> lenyomásával.

Készítsünk indexet.html fájlt a files/ könyvtárban a következőképpen:

$ nano files/index.html

Írd be az index.html fájlba a következő HTML-kódokat:

<!DOCTYPE html>
<html>
<head>
<title>Homepage</title>
</head>
<body>
<h1>Hello World</h1>
<p>Ez működik</p>
</body>
</html>

Ha ezzel a lépéssel végeztél, mentse a fájlt a <Ctrl> + X, majd az Y és az <Enter> billentyűkombinációval.

Az askpass2.yaml playbookot a -ask-pass opcióval futtathatja a következőképpen:

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

Ezután az SSH jelszót fogja kérni, mint korábban.

De a playbook még akkor sem futtatható, ha megadjuk az SSH jelszót. Ennek az az oka, hogy meg kell mondania az Ansible-nak, hogy az SSH jelszó mellett a sudo jelszót is kérje.

A playbook futtatása közben a -ask-become-pass opcióval mondhatja meg az Ansible-nak, hogy kérje a sudo jelszót, a következőképpen:

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

Most az Ansible kérni fogja az SSH jelszót.

A következő lépésben az Ansible kérni fogja a sudo jelszót. Ha a sudo jelszavad megegyezik az SSH jelszóval (ami a legvalószínűbb), akkor hagyd üresen, és nyomd meg az <Enter> billentyűt.

Mint látod, a playbook sikeresen lefutott.

Az automatikus jelszó alapú SSH bejelentkezés és a sudo jelszó alapú bejelentkezés beállítása

Elképzelhető, hogy jelszó alapú SSH és sudo bejelentkezést szeretne használni, de nem szeretné minden alkalommal beírni az SSH jelszót és a sudo jelszót, amikor egy playbookot futtat. Ha ez a helyzet, akkor ez a szakasz az Ön számára készült.

Hogy jelszó alapú SSH bejelentkezést és sudo bejelentkezést használhasson anélkül, hogy a jelszavakat kérdezné, csak annyit kell tennie, hogy hozzáadja az ansible_ssh_pass és ansible_become_pass hosztváltozókat vagy csoportváltozókat az inventory fájljához.

Először is nyissa meg a hosts inventory fájlt az alábbiak szerint:

$ nano hosts

Ha több host van az inventory fájlban, és mindegyik hostnak más jelszava van, akkor az ansible_ssh_pass és ansible_become_pass változókat host változóként adja hozzá (minden host után) az alábbiak szerint.

GYőződjön meg róla, hogy a secret helyett az SSH és sudo jelszavát használja.

Ha az összes vagy néhány hosztnak ugyanaz a jelszava, akkor az ansible_ssh_pass és ansible_become_pass változókat csoportváltozóként adhatja hozzá, ahogy az alábbi példában látható.

Itt csak egy hosztom van, ezért az ansible_ssh_pass és ansible_become_pass változókat az all csoporthoz adtam hozzá (az összes hoszt a leltárfájlban). De ezeket a változókat más specifikus csoportokhoz is hozzáadhatja.

Mihelyt befejezte az ansible_ssh_pass és ansible_become_pass változók hozzáadását a hosts inventory fájlban, mentse a hosts inventory fájlt a <Ctrl> + X, majd az Y és az <Enter> billentyűkombinációval.

Most már futtathatja az askpass2-t.yaml playbookot a következőképpen:

$ ansible-playbook playbooks/askpass2.yaml

Amint látja, a playbook sikeresen lefutott, bár nem kérte az SSH jelszót vagy a sudo jelszót.

Így használja tehát az sshpass-t jelszó alapú SSH és sudo bejelentkezéshez az Ansible-ban. Köszönjük, hogy elolvastad ezt a cikket!