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

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:

$ sudo apt update

Installer nu sshpass via følgende kommando:

$ sudo apt install sshpass -y

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:

$ sudo dnf makecache

Næst skal du installere EPEL-repositoriepakken via følgende kommando:

$ sudo dnf install epel-release -y

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:

$ sudo dnf makecache

Installer sshpass via følgende kommando:

$ sudo dnf install sshpass -y

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:

$ mkdir -pv sshpass/{files,playbooks}

Navigér til projektmappen som følger:

$ cd sshpass/

Opret en hosts inventory-fil som følger:

$ cd sshpass/

Opret en hosts inventory-fil som følger:

$ nano hosts

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:

$ nano ansible.cfg

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:

$ ansible all -u shovon -m ping

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:

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

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:

$ nano playbooks/askpass1.yaml

Tryk følgende linjer i askpass1.yaml playbook-fil:

– hosts: all
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:

$ ansible-playbook playbooks/askpass1.yaml

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:

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

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:

$ nano playbooks/askpass2.yaml

Typ følgende linjer i askpass2.yaml-filen.

– 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
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:

$ nano files/index.html

Indtast følgende HTML-koder i filen index.html:

<!DOCTYPE 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:

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

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:

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

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:

$ nano hosts

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:

$ ansible-playbook playbooks/askpass2.yaml

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!