Hoe gebruik je SSH wachtwoord-gebaseerde login in Ansible met sshpass

In dit artikel laat ik je zien hoe je Ansible playbooks kunt uitvoeren met een SSH wachtwoord-gebaseerde login met sshpass.

Voorvereisten

Als u de voorbeelden in dit artikel wilt uitproberen,

1) U moet Ansible op uw computer geïnstalleerd hebben.
2) U moet minstens een Ubuntu/Debian host hebben waarmee u vanuit Ansible verbinding kunt maken.

Er zijn veel artikelen op LinuxHint gewijd aan het installeren van Ansible. U kunt deze bekijken indien nodig om de nodige programma’s op uw systeem te installeren.

U zult ook sshpass geïnstalleerd moeten hebben op uw computer, waar u Ansible geïnstalleerd zou moeten hebben. Ik zal je laten zien hoe je sshpass installeert op Ubuntu/Debian en CentOS/RHEL in dit artikel. Maak je geen zorgen als je deze programma’s nog niet op je systeem hebt geïnstalleerd.

Installeren van sshpass op Ubuntu/Debian

Het programma sshpass is beschikbaar in de officiële pakketrepository van Ubuntu/Debian. U kunt dit programma eenvoudig op uw computer installeren.

Werk eerst de cache van de APT pakketrepository bij met het volgende commando:

$ sudo apt update

Installeer nu sshpass met het volgende commando:

$ sudo apt install sshpass -y

sshpass zou nu geïnstalleerd moeten zijn.

Shpass installeren op CentOS 8/RHEL 8

sshpass is beschikbaar in de EPEL repository van CentOS 8/RHEL 8. U moet de EPEL repository ingeschakeld hebben om sshpass te installeren.

Werk eerst de cache van de DNF-pakketopslagplaats bij met het volgende commando:

$ sudo dnf makecache

Installeer vervolgens het EPEL-pakket van de opslagplaats met het volgende commando:

$ sudo dnf install epel-release -y

Het EPEL-repositorypakket zou nu geïnstalleerd moeten zijn en de EPEL-repository zou ingeschakeld moeten zijn.

Update de DNF package repository cache opnieuw, als volgt:

$ sudo dnf makecache

Installeer sshpass via het volgende commando:

$ sudo dnf install sshpass -y

sshpass zou geïnstalleerd moeten zijn.

Een Ansible projectdirectory opzetten

Voordat we verder gaan, is het een goed idee om een projectdirectorystructuur aan te maken, gewoon om de zaken een beetje georganiseerd te houden.

Om een projectdirectory sshpass/ en alle benodigde submappen aan te maken (in uw huidige werkdirectory), voert u het volgende commando uit:

$ mkdir -pv sshpass/{files,playbooks}

Navigeer als volgt naar de projectdirectory:

$ cd sshpass/

Maak een hosts-inventarisbestand aan, als volgt:

$ nano hosts

Voeg uw host IP of DNS naam toe in het inventaris bestand.

Als u klaar bent met deze stap, slaat u het bestand op door op <Ctrl> + X te drukken, gevolgd door Y en <Enter>.

Maak een Ansible-configuratiebestand aan in de projectdirectory, als volgt:

$ nano ansible.cfg

Tik nu de volgende regels in het bestand ansible.cfg.

Als u klaar bent met deze stap, slaat u het bestand op door op <Ctrl> + X te drukken, gevolgd door Y en <Enter>.

Test wachtwoord-gebaseerde SSH login in Ansible

Volgende stap is het pingen van de hosts in het inventarisbestand:

$ ansible all -u shovon -m ping

NOOT: De optie -u wordt hier gebruikt om ansible te vertellen als welke gebruiker moet worden ingelogd. In dit geval zal dat de gebruiker shovon zijn. Vervang deze gebruikersnaam door de jouwe vanaf nu, gedurende de hele demo.

Zoals je kunt zien, kan ik niet inloggen op de host en geen commando’s uitvoeren.

Om Ansible te dwingen naar het gebruikerswachtwoord te vragen, voert u het ansible commando uit met het -ask-pass argument, en wel als volgt:

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

Zoals u kunt zien, vraagt Ansible om het SSH wachtwoord van de gebruiker. Typ nu uw SSH wachtwoord (gebruikers login wachtwoord) en druk op <Enter>.

De host kan gepingd worden, als volgt:

Ansible Wachtwoord-gebaseerde SSH login voor Playbooks

U kunt een wachtwoord-gebaseerde SSH login gebruiken wanneer u Ansible playbooks uitvoert. Laten we eens kijken naar een voorbeeld.

Maak eerst een nieuw playbook askpass1.yaml aan in de playbooks/ directory, als volgt:

$ nano playbooks/askpass1.yaml

Type de volgende regels in het askpass1.yaml playbook bestand:

– hosts: all
user: shovon
tasks:
– naam: Ping alle hosts
ping:
– naam: Print een bericht
debug:
msg: ‘Alles klaar’

Als u klaar bent met deze stap, slaat u het bestand op door op <Ctrl> + X te drukken, gevolgd door Y en <Enter>.

Run het askpass1.yaml playbook, als volgt:

$ ansible-playbook playbooks/askpass1.yaml

Zoals u kunt zien, kan ik geen verbinding maken met de host. U kunt zien dat dit komt doordat ik het ansible-playbook commando niet heb uitgevoerd met de -ask-pass optie.

Uitvoeren van het askpass1.yaml playbook met de -ask-pass optie, als volgt:

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

Zoals u kunt zien, vraagt Ansible om een SSH-wachtwoord. Typ uw SSH wachtwoord in en druk op <Enter>.

Het playbook askpass1.yaml zou nu succesvol moeten draaien.

Ansible sudo Password Login for Playbooks

De optie -ask-pass vraagt alleen om het SSH login wachtwoord. Wat als je ook het sudo wachtwoord wil intypen? U zult zien hoe dit te doen in de volgende stappen.

Maak eerst een nieuw playbook askpass2.yaml in de playbooks/ directory, als volgt:

$ nano playbooks/askpass2.yaml

Type de volgende regels in het bestand askpass2.yaml.

– 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
state: started
enabled: True
– name: Kopieer index.html bestand naar server
copy:
src: ../files/index.html
dest: /var/www/html/index.html
mode: 0644
owner: www-data
group: www-data

Hier heb ik het commando become: True gebruikt om Ansible te vertellen dat deze playbook met sudo rechten moet worden uitgevoerd. Als u klaar bent met deze stap, slaat u het bestand askpass2.yaml op door op <Ctrl> + X te drukken, gevolgd door Y en <Enter>.

Creëer een index.html bestand aan in de files/ directory, als volgt:

$ nano files/index.html

Type de volgende HTML codes in het index.html bestand:

<!DOCTYPE html>
<html>
<head>
<title>Homepage</title>
</head>
<body>
<h1>Hello World</h1>
<p>Het werkt</p>
</body>
</html>

Als u klaar bent met deze stap, slaat u het bestand op door op <Ctrl> + X te drukken, gevolgd door Y en <Enter>.

U kunt het playbook askpass2.yaml uitvoeren met de optie -ask-pass, en wel als volgt:

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

U wordt dan om het SSH-wachtwoord gevraagd, net als voorheen.

Maar het kan zijn dat het playbook nog steeds niet wordt uitgevoerd, zelfs als u het SSH-wachtwoord opgeeft. De reden hiervoor is dat u Ansible moet vertellen om te vragen naar het sudo-wachtwoord, evenals het SSH-wachtwoord.

U kunt Ansible vertellen om te vragen naar het sudo-wachtwoord met behulp van de -ask-become-pass optie tijdens het uitvoeren van het playbook, als volgt:

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

Nu zal Ansible u om het SSH-wachtwoord vragen.

Na de volgende stap zal Ansible u om het sudo-wachtwoord vragen. Als uw sudo-wachtwoord hetzelfde is als het SSH-wachtwoord (wat het meest waarschijnlijk is), laat het dan leeg en druk op <Enter>.

Zoals u kunt zien, is het afspeelboek met succes uitgevoerd.

Automatische wachtwoord-gebaseerde SSH login en sudo wachtwoord login configureren

Het kan zijn dat u wachtwoord-gebaseerde SSH en sudo login wil gebruiken, maar dat u niet telkens het SSH wachtwoord en sudo wachtwoord wil intikken wanneer u een playbook uitvoert. Als dat het geval is, dan is deze sectie voor u.

Om wachtwoord-gebaseerde SSH login en sudo login te gebruiken zonder te worden gevraagd om de wachtwoorden, hoeft u alleen maar de ansible_ssh_pass en ansible_become_pass host variabelen of groep variabelen toe te voegen in uw inventaris bestand.

Open eerst het hosts-inventarisatiebestand, als volgt:

$ nano hosts

Als u meerdere hosts in uw inventarisatiebestand hebt en elk van de hosts heeft verschillende wachtwoorden, dan voegt u de ansible_ssh_pass en ansible_become_pass variabelen als hostvariabelen toe (na elke host), als volgt.

Verwissel secret met uw SSH- en sudo-wachtwoord.

Als alle of sommige hosts hetzelfde wachtwoord hebben, kunt u de ansible_ssh_pass en ansible_become_pass variabelen als groepsvariabelen toevoegen, zoals in het onderstaande voorbeeld wordt weergegeven.

Hier, ik heb maar één host, dus ik heb de ansible_ssh_pass en ansible_become_pass variabelen toegevoegd voor de all groep (alle hosts in het inventaris bestand). Maar u kunt deze variabelen ook voor andere specifieke groepen toevoegen.

Als u klaar bent met het toevoegen van de ansible_ssh_pass en ansible_become_pass variabelen in het hosts inventory bestand, slaat u het hosts inventory bestand op door op <Ctrl> + X te drukken, gevolgd door Y en <Enter>.

U kunt nu het askpass2.yaml playbook, als volgt uitvoeren:

$ ansible-playbook playbooks/askpass2.yaml

Zoals u kunt zien, is het playbook met succes uitgevoerd, hoewel het niet om het SSH wachtwoord of het sudo wachtwoord heeft gevraagd.

Dus, dit is hoe u sshpass gebruikt voor wachtwoord-gebaseerde SSH en sudo login in Ansible. Dank u voor het lezen van dit artikel!