Förutsättningar
Om du vill prova exemplen som diskuteras i den här artikeln,
1) Du måste ha Ansible installerat på din dator.
2) Du måste ha minst en Ubuntu / Debian-värd som du kan ansluta till från Ansible.
Det finns många artiklar om LinuxHint tillägnad Installera Ansible. Du kan kolla in dessa om det behövs för att installera nödvändiga program på ditt system.
Du måste också ha sshpass installerad på din dator, där du bör ha Ansible installerat. Jag visar dig hur du installerar sshpass om Ubuntu / Debian och CentOS / RHEL i den här artikeln. Oroa dig inte om du inte har dessa program redan installerade på ditt system.
Installerar sshpass på Ubuntu / Debian
Programmet sshpass finns i det officiella paketförvaret för Ubuntu / Debian. Du kan enkelt installera det här programmet på din dator.
Uppdatera först APT-paketets förvarscache via följande kommando:
$ sudo apt uppdatering
Installera nu sshpass via följande kommando:
$ sudo apt install sshpass -y
sshpass ska nu installeras.
Installerar sshpass på CentOS 8 / RHEL 8
sshpass finns i EPEL-förvaret för CentOS 8 / RHEL 8. Du måste ha EPEL-förvaret aktiverat för att installera sshpass.
Uppdatera först DNF-paketets förvarscache via följande kommando:
$ sudo dnf makecache
Installera sedan EPEL-databaspaketet med följande kommando:
$ sudo dnf installera epel-release -y
EPEL-databaspaketet ska nu installeras och EPEL-arkivet bör aktiveras.
Uppdatera DNF-paketets förvarscache igen, enligt följande:
$ sudo dnf makecache
Installera sshpass via följande kommando:
$ sudo dnf installera sshpass -y
sshpass bör installeras.
Ställa in en synlig projektkatalog
Innan vi går vidare skulle det vara bra att skapa en projektkatalogstruktur, bara för att hålla sakerna lite organiserade.
Att skapa en projektkatalog sshpass / och alla nödvändiga underkataloger (i din nuvarande arbetskatalog), kör följande kommando:
$ mkdir -pv sshpass / filer, playbooks
Navigera till projektkatalogen enligt följande:
$ cd sshpass /
Skapa en värdar inventeringsfil, enligt följande:
$ nano värdar
Lägg till ditt värd-IP- eller DNS-namn i inventeringsfilen.
När du är klar med detta steg sparar du filen genom att trycka på
Skapa en Ansible-konfigurationsfil i projektkatalogen enligt följande:
$ nano ansible.cfg
Skriv nu in följande rader i ansible.cfg fil.
När du är klar med detta steg sparar du filen genom att trycka på
Testar lösenordsbaserad SSH-inloggning i Ansible
Försök sedan att pinga värdarna i inventeringsfilen enligt följande:
$ ansible all -u shovon -m pingNOTERA: Här, den -u alternativet används för att tala om för användaren vilken användare som ska logga in som. I det här fallet är det användaren shovon. Ersätt det här användarnamnet med ditt från och med nu, under hela demonstrationen.
Som du kan se kan jag inte logga in på värden och köra några kommandon.
För att tvinga Ansible att be om användarlösenordet, kör ansible kommando med -ask-pass argument enligt följande:
$ ansible all -u shovon --ask-pass -m ping
Som du kan se ber Ansible om SSH-lösenordet för användaren. Skriv nu in ditt SSH-lösenord (användarnamnlösenord) och tryck på
Värden kan pingas på följande sätt:
Ansible-lösenordsbaserad SSH-inloggning för Playbooks
Du kan använda en lösenordsbaserad SSH-inloggning när du kör Ansible-spelböcker. Låt oss titta på ett exempel.
Skapa först en ny spelbok askpass1.yaml i spelböcker / katalog, enligt följande:
$ nano playbooks / askpass1.yaml
Skriv följande rader i askpass1.yaml playbook-fil:
- värdar: allaanvändare: shovon
uppgifter:
- namn: Ping alla värdar
ping:
- namn: Skriv ut ett meddelande
felsöka:
msg: 'All set'
När du är klar med detta steg sparar du filen genom att trycka på
Springa det askpass1.yaml spelbok, enligt följande:
$ ansible-playbook playbooks / askpass1.yaml
Som du kan se kan jag inte ansluta till värden. Du kan se att detta beror på att jag inte körde ansible-playbook kommando med -ask-pass alternativ.
Springa det askpass1.yaml spelbok med -ask-pass alternativ enligt följande:
$ ansible-playbook -ask-pass playbooks / askpass1.yaml
Som du kan se ber Ansible om ett SSH-lösenord. Skriv in ditt SSH-lösenord och tryck på
Spelboken askpass1.yaml ska nu köras framgångsrikt.
Ansible sudo Password Login för Playbooks
De -ask-pass alternativet frågar endast SSH-inloggningslösenordet. Vad händer om du också vill skriva in sudo-lösenordet? Du kommer att se hur du gör detta i nästa steg.
Skapa först en ny spelbok askpass2.yaml i spelböcker / katalog, enligt följande:
$ nano playbooks / askpass2.yaml
Skriv följande rader i askpass2.yaml fil.
- värdar: allaanvändare: shovon
bli sann
uppgifter:
- namn: Installera apache2-paketet
benägen:
namn: apache2
state: senaste
- namn: Se till att apache2-tjänsten körs
service:
namn: apache2
tillstånd: startade
aktiverat: True
- namn: Kopiera index.html-fil till servern
kopiera:
src: ... / filer / index.html
dest: / var / www / html / index.html
läge: 0644
ägare: www-data
grupp: www-data
Här har jag använt kommandot bli sann att berätta Ansible att köra den här spelboken med sudo-privilegier. När du är klar med det här steget, spara askpass2.yaml fil genom att trycka på
Skapa en index.html filen i filer / katalog, enligt följande:
$ nano-filer / index.html
Skriv följande HTML-koder i index.html fil:
Hej världen
Det fungerar
När du är klar med detta steg sparar du filen genom att trycka på
Du kan köra askpass2.yaml spelbok med -ask-pass alternativ enligt följande:
$ ansible-playbook --ask-pass playbooks / askpass2.yaml
Du kommer att bli ombedd att ange SSH-lösenordet, som tidigare.
Men spelboken kan fortfarande inte köras även om du anger SSH-lösenordet. Anledningen till detta är att du måste be Ansible att be om sudo-lösenordet, liksom SSH-lösenordet.
Du kan be Ansible att be om sudo-lösenordet med -fråga-bli-pass alternativ när du kör playbook, enligt följande:
$ ansible-playbook --ask-pass - ask-become-pass playbooks / askpass2.yaml
Nu kommer Ansible att be dig om SSH-lösenordet.
Därefter kommer Ansible att be dig om sudo-lösenordet. Om ditt sudo-lösenord är detsamma som SSH-lösenordet (vilket sannolikt är), lämna det tomt och tryck
Som du kan se körde spelboken framgångsrikt.
Konfigurera automatisk lösenordsbaserad SSH-inloggning och sudo-lösenordsinloggning
Du kanske vill använda lösenordsbaserad SSH och sudo-inloggning, men vill inte skriva in SSH-lösenordet och sudo-lösenordet varje gång du kör en spelbok. Om så är fallet är det här avsnittet något för dig.
För att använda lösenordsbaserad SSH-inloggning och sudo-inloggning utan att bli ombedd att ange lösenorden behöver du bara lägga till ansible_ssh_pass och ansible_become_pass värdvariabler eller gruppvariabler i din inventeringsfil.
Öppna först värdar inventeringsfil, enligt följande:
$ nano värdar
Om du har flera värdar i din inventeringsfil och var och en av värdarna har olika lösenord, lägg sedan till ansible_ssh_pass och ansible_become_pass variabler som värdvariabler (efter varje värd) enligt följande.
Var noga med att byta ut den hemlighet med ditt SSH- och sudo-lösenord.
Om alla eller några av värdarna har samma lösenord kan du lägga till ansible_ssh_pass och ansible_become_pass variabler som gruppvariabler, som visas i exemplet nedan.
Här har jag bara en värd, så jag har lagt till ansible_ssh_pass och ansible_become_pass variabler för Allt grupp (alla värdar i inventeringsfilen). Men du kan också lägga till dessa variabler för andra specifika grupper.
När du är klar med att lägga till ansible_ssh_pass och ansible_become_pass variabler i värdar inventeringsfil, spara värdar inventeringsfil genom att trycka på
Du kan nu köra askpass2.yaml spelbok, enligt följande:
$ ansible-playbook playbooks / askpass2.yaml
Som du kan se körde spelboken framgångsrikt, men den bad inte om SSH-lösenordet eller sudo-lösenordet.
Så detta är hur du använder sshpass för lösenordsbaserad SSH och sudo-inloggning i Ansible. Tack för att du läser den här artikeln!