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
- A sshpass telepítése Ubuntun/Debianon
- A sshpass telepítése CentOS 8/RHEL 8-ra
- Az Ansible projektkönyvtár beállítása
- Teszting Password-Based SSH Login in Ansible in Ansible
- Ansible Jelszó alapú SSH bejelentkezés a playbookokhoz
- Ansible sudo Password Login for Playbooks
- Az automatikus jelszó alapú SSH bejelentkezés és a sudo jelszó alapú bejelentkezés beállítása
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:
Most telepítse az sshpass-t a következő paranccsal:
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:
Majd telepítse az EPEL csomagtároló csomagját a következő paranccsal:
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:
Telepítse az sshpass-t a következő paranccsal:
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:
Navigáljon a projektkönyvtárba az alábbiak szerint:
Készítsen egy hosts inventory fájlt az alábbiak szerint:
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:
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:
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:
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:
Az askpass1-be írja be a következő sorokat.yaml playbook fájl:
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:
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:
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:
Az askpass2.yaml fájlba írja be a következő sorokat.
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:
Írd be az index.html fájlba a következő HTML-kódokat:
<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:
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:
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:
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:
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!