Hur man använder SSH Password-Based Login i Ansible med sshpass
I den här artikeln kommer jag att visa hur man kör Ansible playbooks med hjälp av SSH Password-Based Login med sshpass.
- Förutsättningar
- Installation av sshpass på Ubuntu/Debian
- Installation av sshpass på CentOS 8/RHEL 8
- Sätt upp en Ansible-projektkatalog
- Test av lösenordsbaserad SSH-inloggning i Ansible
- Ansible Lösenordsbaserad SSH-inloggning för spelböcker
- Ansible sudo Lösenordslogin för playbooks
- Konfigurera automatisk lösenordsbaserad SSH-inloggning och sudo-lösenordsinloggning
Förutsättningar
Om du vill prova de exempel 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 på LinuxHint som ägnas åt att installera Ansible. Du kan kolla dessa om det behövs för att installera de nödvändiga programmen på ditt system.
Du måste också ha sshpass installerat på din dator, där du ska ha Ansible installerat. Jag kommer att visa dig hur du installerar sshpass på Ubuntu/Debian och CentOS/RHEL i den här artikeln. Oroa dig inte om du inte redan har dessa program installerade på ditt system.
Installation av sshpass på Ubuntu/Debian
Programmet sshpass finns i det officiella paketförrådet för Ubuntu/Debian. Du kan enkelt installera det här programmet på din dator.
Först uppdaterar du APT:s cache i paketförrådet via följande kommando:
Installera nu sshpass via följande kommando:
sshpass bör nu vara installerat.
Installation av sshpass på CentOS 8/RHEL 8
sshpass finns i EPEL-förrådet för CentOS 8/RHEL 8. Du måste ha EPEL-förteckningen aktiverad för att kunna installera sshpass.
Först uppdaterar du DNF-paketens cache i förvaret via följande kommando:
Nästan installerar du EPEL-paketet i förvaret via följande kommando:
Paketet för EPEL-förvaret bör nu vara installerat och EPEL-förvaret bör vara aktiverat.
Uppdatera DNF-paketens cacheminne för förvaret igen enligt följande:
Installera sshpass via följande kommando:
sshpass bör vara installerat.
Sätt upp en Ansible-projektkatalog
För att gå vidare är det en bra idé att skapa en projektkatalogstruktur, bara för att hålla saker och ting lite organiserade.
För att skapa en projektkatalog sshpass/ och alla nödvändiga underkataloger (i din nuvarande arbetskatalog), kör följande kommando:
Navigera till projektkatalogen enligt följande:
Skapa en värdförteckningsfil enligt följande:
Häng in din värds IP- eller DNS-namn i inventeringsfilen.
När du är klar med detta steg sparar du filen genom att trycka på <Ctrl> + X, följt av Y och <Enter>.
Skapa en Ansible-konfigurationsfil i projektkatalogen på följande sätt:
Skriv nu in följande rader i filen ansible.cfg.
När du är klar med detta steg sparar du filen genom att trycka på <Ctrl> + X, följt av Y och <Enter>.
Test av lösenordsbaserad SSH-inloggning i Ansible
Nästan försöker du pinga värddatorerna i inventeringsfilen på följande sätt:
NOTAT: Här används -u-alternativet för att tala om för ansible vilken användare som ska logga in som. I det här fallet blir det användaren shovon. Ersätt detta användarnamn 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 fråga efter användarens lösenord kör du ansible-kommandot med argumentet -ask-pass enligt följande:
Som du kan se frågar Ansible efter användarens SSH-lösenord. Skriv nu in ditt SSH-lösenord (användarens inloggningslösenord) och tryck på <Enter>.
Värden kan pingas enligt följande:
Ansible Lösenordsbaserad SSH-inloggning för spelböcker
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 katalogen playbooks/ enligt följande:
Skriv följande rader i askpass1.yaml playbook file:
user: shovon
tasks:
– name: Ping all hosts
ping:
– name: Print a message
debug:
msg: ’All set’
När du är klar med detta steg sparar du filen genom att trycka på <Ctrl> + X, följt av Y och <Enter>.
Kör spelboken askpass1.yaml enligt följande:
Som du kan se kan jag inte ansluta till värden. Du kan se att det beror på att jag inte körde ansible-playbook-kommandot med alternativet -ask-pass.
Kör askpass1.yaml playbook med alternativet -ask-pass enligt följande:
Som du kan se frågar Ansible efter ett SSH-lösenord. Skriv in ditt SSH-lösenord och tryck på <Enter>.
Playbooken askpass1.yaml bör nu köras framgångsrikt.
Ansible sudo Lösenordslogin för playbooks
Objektet -ask-pass frågar endast efter SSH-loginlö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.
Först skapar du en ny spelbok askpass2.yaml i katalogen playbooks/ enligt följande:
Skriv följande rader i filen askpass2.yaml.
user: shovon
become: True
uppgifter:
– namn: Installera apache2-paketet
apt:
namn: apache2
status: senaste
– namn: Kontrollera att apache2-tjänsten körs
service:
namn: apache2
status: startat
aktiverad: True
– namn: Kopiera index.html-filen till servern
copy:
src: ../files/index.html
dest: /var/www/html/index.html
mode: 0644
owner: www-data
group: www-data
Här har jag använt kommandot become: True för att tala om för Ansible att köra den här spelboken med sudo privilegier. När du är klar med det här steget sparar du filen askpass2.yaml genom att trycka på <Ctrl> + X, följt av Y och <Enter>.
Skapa ett index.html-fil i katalogen files/ enligt följande:
Skriv följande HTML-koder i filen index.html:
<html>
<head>
<title>Homepage</title>
</head>
<body>
<h1>Hello World</h1>
<p>Det fungerar</p>
</body>
</html>
När du är klar med detta steg, spara filen genom att trycka på <Ctrl> + X följt av Y och <Enter>.
Du kan köra spelboken askpass2.yaml med alternativet -ask-pass enligt följande:
Du kommer då att bli tillfrågad om SSH-lösenordet, som tidigare.
Men det är fortfarande möjligt att playbooken inte kan köras även om du anger SSH-lösenordet. Anledningen till detta är att du måste säga till Ansible att fråga efter sudo-lösenordet samt SSH-lösenordet.
Du kan säga till Ansible att fråga efter sudo-lösenordet med hjälp av alternativet -ask-become-pass när du kör spelboken på följande sätt:
Nu frågar Ansible efter SSH-lösenordet.
Nästan kommer Ansible att fråga efter sudo-lösenordet. Om ditt sudo-lösenord är detsamma som SSH-lösenordet (vilket är mest troligt) lämnar du det tomt och trycker på <Enter>.
Som du kan se kördes 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 playbook. Om så är fallet är det här avsnittet för dig.
För att använda lösenordsbaserad SSH-inloggning och sudo-inloggning utan att bli tillfrågad om lösenorden behöver du bara lägga till värdvariablerna eller gruppvariablerna ansible_ssh_pass och ansible_become_pass i din inventeringsfil.
Först öppnar du inventeringsfilen hosts enligt följande:
Om du har flera värdar i inventeringsfilen och var och en av värdarna har olika lösenord lägger du till variablerna ansible_ssh_pass och ansible_become_pass som värdsvariabler (efter varje värd) enligt följande.
Se till att ersätta secret med ditt SSH- och sudo-lösenord.
Om alla eller några av värdarna har samma lösenord kan du lägga till variablerna ansible_ssh_pass och ansible_become_pass som gruppvariabler, enligt exemplet nedan.
Här har jag bara en värd, så jag har lagt till variablerna ansible_ssh_pass och ansible_become_pass för gruppen all (alla värdar i inventeringsfilen). Men du kan lägga till dessa variabler för andra specifika grupper också.
När du har lagt till variablerna ansible_ssh_pass och ansible_become_pass i inventeringsfilen för värdar sparar du inventeringsfilen för värdar genom att trycka på <Ctrl> + X, följt av Y och <Enter>.
Du kan nu köra askpass2.yaml playbook enligt följande:
Som du kan se kördes playbooken framgångsrikt, även om den inte frågade efter SSH-lösenordet eller sudo-lösenordet.
Så här använder du alltså sshpass för lösenordsbaserad SSH och sudo-inloggning i Ansible. Tack för att du läste den här artikeln!