Sådan bruger du SSH Password-Based Login i Ansible med sshpass
I denne artikel vil jeg vise dig, hvordan du kan køre Ansible playbooks ved hjælp af SSH password-baseret login med sshpass.
- Forudsætninger
- Installation af sshpass på Ubuntu/Debian
- Installation af sshpass på CentOS 8/RHEL 8
- Oprettelse af en Ansible-projektmappe
- Test af adgangskodebaseret SSH-login i Ansible
- Ansible adgangskodebaseret SSH-login til afspilningsbøger
- Ansible sudo Password Login for Playbooks
- Konfigurering af automatisk adgangskodebaseret SSH-login og sudo-login med adgangskode
Forudsætninger
Hvis du gerne vil prøve de eksempler, der behandles i denne artikel,
1) Du skal have Ansible installeret på din computer.
2) Du skal som minimum have en Ubuntu/Debian-vært, som du kan oprette forbindelse til fra Ansible.
Der er mange artikler på LinuxHint, der er dedikeret til Installation af Ansible. Du kan tjekke disse ud, hvis du har brug for at installere de nødvendige programmer på dit system.
Du skal også have sshpass installeret på din computer, hvor du skal have Ansible installeret. Jeg vil vise dig, hvordan du installerer sshpass på Ubuntu/Debian og CentOS/RHEL i denne artikel. Du skal ikke bekymre dig, hvis du ikke allerede har disse programmer installeret på dit system.
Installation af sshpass på Ubuntu/Debian
Programmet sshpass er tilgængeligt i det officielle pakkeregister for Ubuntu/Debian. Du kan nemt installere dette program på din computer.
Først skal du opdatere APT-pakkearkivets cache via følgende kommando:
Installer nu sshpass via følgende kommando:
sshpass skulle nu være installeret.
Installation af sshpass på CentOS 8/RHEL 8
sshpass er tilgængelig i EPEL-repositoriet for CentOS 8/RHEL 8. Du skal have EPEL-repositoriet aktiveret for at installere sshpass.
Først skal du opdatere DNF-pakkerepositoriecachen via følgende kommando:
Næst skal du installere EPEL-repositoriepakken via følgende kommando:
Pakken EPEL-repository bør nu være installeret, og EPEL-repositoryet bør være aktiveret.
opdatér DNF-pakkeopbevaringscachen igen som følger:
Installer sshpass via følgende kommando:
sshpass skulle være installeret.
Oprettelse af en Ansible-projektmappe
Hvor vi går videre, vil det være en god idé at oprette en projektmappestruktur, bare for at holde tingene en smule organiseret.
For at oprette en projektmappe sshpass/ og alle de nødvendige undermapper (i din nuværende arbejdskatalog) skal du køre følgende kommando:
Navigér til projektmappen som følger:
Opret en hosts inventory-fil som følger:
Opret en hosts inventory-fil som følger:
Føj din værts IP eller dit DNS-navn til inventarfilen.
Når du er færdig med dette trin, skal du gemme filen ved at trykke på <Ctrl> + X, efterfulgt af Y og <Enter>.
Opret en Ansible-konfigurationsfil i projektmappen som følger:
Indtast nu følgende linjer i filen ansible.cfg.
Når du er færdig med dette trin, skal du gemme filen ved at trykke på <Ctrl> + X, efterfulgt af Y og <Enter>.
Test af adgangskodebaseret SSH-login i Ansible
Derpå skal du prøve at pinge værterne i inventarfilen som følger:
NOTAT: Her bruges indstillingen -u til at fortælle ansible, hvilken bruger ansible skal logge ind som. I dette tilfælde vil det være brugeren shovon. Udskift dette brugernavn med dit fra nu af i hele demoen.
Som du kan se, er jeg ikke i stand til at logge ind på værten og køre nogen kommandoer.
For at tvinge Ansible til at spørge om brugerens adgangskode skal du køre ansible-kommandoen med argumentet -ask-pass som følger:
Som du kan se, beder Ansible om brugerens SSH-adgangskode. Indtast nu din SSH-adgangskode (brugerens loginadgangskode), og tryk på <Enter>.
Værten kan pinges, som følger:
Ansible adgangskodebaseret SSH-login til afspilningsbøger
Du kan bruge et adgangskodebaseret SSH-login, når du kører Ansible-spilbøger. Lad os se på et eksempel.
Først skal du oprette en ny playbook askpass1.yaml i mappen playbooks/ som følger:
Tryk følgende linjer i askpass1.yaml playbook-fil:
user: shovon
tasks:
– name: Ping all hosts
ping:
– name: Print a message
debug:
msg: ‘All set’
Når du er færdig med dette trin, skal du gemme filen ved at trykke på <Ctrl> + X, efterfulgt af Y og <Enter>.
Kør playbooken askpass1.yaml som følger:
Som du kan se, er jeg ikke i stand til at oprette forbindelse til værten. Du kan se, at det skyldes, at jeg ikke har kørt ansible-playbook-kommandoen med indstillingen -ask-pass.
Kør askpass1.yaml playbook med indstillingen -ask-pass som følger:
Som du kan se, beder Ansible om en SSH-adgangskode. Indtast din SSH-adgangskode, og tryk på <Enter>.
Playbooken askpass1.yaml skulle nu køre med succes.
Ansible sudo Password Login for Playbooks
Optionen -ask-pass vil kun bede om SSH-loginadgangskoden. Hvad hvis du også ønsker at indtaste sudoadgangskoden? Du vil se, hvordan du gør dette i de næste trin.
Først skal du oprette en ny playbook askpass2.yaml i mappen playbooks/ på følgende måde:
Typ følgende linjer i askpass2.yaml-filen.
user: shovon
become: True
tasks:
– name: Install apache2 Package
apt:
name: apache2
state: latest
– name: Make sure apache2 service is running
service:
name: apache2
name: apache2
state: started
enabled: True
– navn: Kopier index.html-filen til serveren
copy:
src: ../files/index.html
dest: /var/www/html/index.html
mode:: /var/www/html/index.html
mode: 0644
owner: www-data
group: www-data
Her, jeg har brugt kommandoen become: True til at fortælle Ansible at køre denne playbook med sudo privilegier. Når du er færdig med dette trin, skal du gemme filen askpass2.yaml ved at trykke på <Ctrl> + X, efterfulgt af Y og <Enter>.
Opret et indeks.html-fil i mappen files/ på følgende måde:
Indtast følgende HTML-koder i filen index.html:
<html>
<head>
<title>Homepage</title>
</head>
<body>
<h1>Hello World</h1>
<p>Det virker</p>
</body>
</html>
Når du er færdig med dette trin, gemmer du filen ved at trykke på <Ctrl> + X efterfulgt af Y og <Enter>.
Du kan køre playbooken askpass2.yaml med indstillingen -ask-pass på følgende måde:
Du vil derefter blive bedt om SSH-adgangskoden, som før.
Men playbooken kan stadig ikke køre, selv om du oplyser SSH-adgangskoden. Grunden til dette er, at du skal bede Ansible om at bede om sudo-adgangskoden samt SSH-adgangskoden.
Du kan bede Ansible om at bede om sudo-adgangskoden ved hjælp af indstillingen -ask-become-pass, mens du kører playbooken, som følger:
Nu vil Ansible bede dig om SSH-adgangskoden.
Næste gang vil Ansible bede dig om sudoadgangskoden. Hvis din sudo-adgangskode er den samme som SSH-adgangskoden (hvilket er mest sandsynligt), skal du lade den være blank og trykke på <Enter>.
Som du kan se, kørte playbooken med succes.
Konfigurering af automatisk adgangskodebaseret SSH-login og sudo-login med adgangskode
Du ønsker måske at bruge adgangskodebaseret SSH- og sudo-login, men ønsker ikke at indtaste SSH-adgangskoden og sudo-adgangskoden, hver gang du kører en playbook. Hvis det er tilfældet, er dette afsnit for dig.
For at bruge adgangskodebaseret SSH-login og sudo-login uden at blive bedt om adgangskoderne, skal du blot tilføje værtsvariablerne ansible_ssh_pass og ansible_become_pass eller gruppevariablerne i din inventarfil.
Først skal du åbne hosts-inventarfilen som følger:
Hvis du har flere værter i din inventarfil, og hver af værterne har forskellige adgangskoder, skal du tilføje variablerne ansible_ssh_pass og ansible_become_pass som værtsvariabler (efter hver vært) som følger:
Sørg for at erstatte secret med din SSH- og sudoadgangskode.
Hvis alle eller nogle af værterne har den samme adgangskode, kan du tilføje variablerne ansible_ssh_pass og ansible_become_pass som gruppevariabler, som vist i eksemplet nedenfor.
Her har jeg kun én vært, så jeg har tilføjet variablerne ansible_ssh_pass og ansible_become_pass for gruppen all (alle værter i inventarfilen). Men du kan også tilføje disse variabler for andre specifikke grupper.
Når du er færdig med at tilføje variablerne ansible_ssh_pass og ansible_become_pass i hosts inventory filen, skal du gemme hosts inventory filen ved at trykke på <Ctrl> + X, efterfulgt af Y og <Enter>.
Du kan nu køre askpass2.yaml playbook, som følger:
Som du kan se, kørte playbooken med succes, selv om den ikke spurgte efter SSH-adgangskoden eller sudo-adgangskoden.
Sådan bruger du sshpass til adgangskodebaseret SSH- og sudo-login i Ansible. Tak fordi du læste denne artikel!