SSSH-Passwort-basierte Anmeldung in Ansible mit sshpass

In diesem Artikel zeige ich Ihnen, wie Sie Ansible-Playbooks mit einer SSH-Passwort-basierten Anmeldung mit sshpass ausführen können.

Voraussetzungen

Wenn Sie die in diesem Artikel besprochenen Beispiele ausprobieren möchten,

1) Sie müssen Ansible auf Ihrem Computer installiert haben.
2) Sie müssen mindestens einen Ubuntu/Debian-Host haben, mit dem Sie sich von Ansible aus verbinden können.

Es gibt viele Artikel auf LinuxHint, die sich mit der Installation von Ansible beschäftigen. Sie können diese bei Bedarf lesen, um die notwendigen Programme auf Ihrem System zu installieren.

Sie müssen auch sshpass auf Ihrem Computer installiert haben, auf dem Sie Ansible installiert haben sollten. In diesem Artikel zeige ich Ihnen, wie Sie sshpass auf Ubuntu/Debian und CentOS/RHEL installieren. Machen Sie sich keine Sorgen, wenn Sie diese Programme nicht bereits auf Ihrem System installiert haben.

Installation von sshpass auf Ubuntu/Debian

Das Programm sshpass ist im offiziellen Paket-Repository von Ubuntu/Debian verfügbar. Sie können dieses Programm einfach auf Ihrem Computer installieren.

Zunächst aktualisieren Sie den Cache des APT-Paket-Repositorys mit folgendem Befehl:

$ sudo apt update

Nun installieren Sie sshpass mit folgendem Befehl:

$ sudo apt install sshpass -y

sshpass sollte nun installiert sein.

Installation von sshpass auf CentOS 8/RHEL 8

sshpass ist im EPEL-Repository von CentOS 8/RHEL 8 verfügbar. Sie müssen das EPEL-Repository aktiviert haben, um sshpass zu installieren.

Aktualisieren Sie zunächst den DNF-Paket-Repository-Cache mit folgendem Befehl:

$ sudo dnf makecache

Nachfolgend installieren Sie das EPEL-Repository-Paket mit dem folgenden Befehl:

$ sudo dnf install epel-release -y

Das EPEL-Repository-Paket sollte nun installiert und das EPEL-Repository aktiviert sein.

Aktualisieren Sie den DNF-Paket-Repository-Cache erneut, wie folgt:

$ sudo dnf makecache

Installieren Sie sshpass über den folgenden Befehl:

$ sudo dnf install sshpass -y

sshpass sollte installiert sein.

Einrichten eines Ansible-Projektverzeichnisses

Bevor wir weitermachen, wäre es eine gute Idee, eine Projektverzeichnisstruktur zu erstellen, nur um die Dinge ein wenig zu organisieren.

Um ein Projektverzeichnis sshpass/ und alle erforderlichen Unterverzeichnisse (in Ihrem aktuellen Arbeitsverzeichnis) zu erstellen, führen Sie den folgenden Befehl aus:

$ mkdir -pv sshpass/{files,playbooks}

Navigieren Sie wie folgt in das Projektverzeichnis:

$ cd sshpass/

Erstellen Sie wie folgt eine Hosts-Inventarisierungsdatei:

$ nano hosts

Fügen Sie Ihre Host-IP oder Ihren DNS-Namen in die Inventarisierungsdatei ein.

Wenn Sie mit diesem Schritt fertig sind, speichern Sie die Datei durch Drücken von <Strg> + X, gefolgt von Y und <Enter>.

Erstellen Sie eine Ansible-Konfigurationsdatei im Projektverzeichnis wie folgt:

$ nano ansible.cfg

Nun geben Sie die folgenden Zeilen in die Datei ansible.cfg ein.

Wenn Sie mit diesem Schritt fertig sind, speichern Sie die Datei durch Drücken von <Strg> + X, gefolgt von Y und <Enter>.

Testen der passwortbasierten SSH-Anmeldung in Ansible

Nächste versuchen Sie, die Hosts in der Inventarisierungsdatei wie folgt anzupingen:

$ ansible all -u shovon -m ping

Hinweis: Hier wird die Option -u verwendet, um Ansible mitzuteilen, als welcher Benutzer es sich anmelden soll. In diesem Fall wird es der Benutzer shovon sein. Ersetzen Sie diesen Benutzernamen während der gesamten Demo durch Ihren eigenen.

Wie Sie sehen können, kann ich mich nicht am Host anmelden und keine Befehle ausführen.

Um Ansible zu zwingen, nach dem Benutzerpasswort zu fragen, führen Sie den Befehl ansible mit dem Argument -ask-pass wie folgt aus:

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

Wie Sie sehen, fragt Ansible nach dem SSH-Passwort des Benutzers. Geben Sie nun Ihr SSH-Passwort (Passwort für die Benutzeranmeldung) ein und drücken Sie <Eingabe>.

Der Host kann wie folgt angepingt werden:

Ansible Passwortbasierte SSH-Anmeldung für Playbooks

Sie können eine passwortbasierte SSH-Anmeldung verwenden, wenn Sie Ansible-Playbooks ausführen. Sehen wir uns ein Beispiel an.

Erstellen Sie zunächst ein neues Playbook askpass1.yaml im Verzeichnis playbooks/ wie folgt:

$ nano playbooks/askpass1.yaml

Geben Sie die folgenden Zeilen in die Datei askpass1.yaml playbook file:

– hosts: all
user: shovon
tasks:
– name: Ping all hosts
ping:
– name: Print a message
debug:
msg: ‚All set‘

Wenn Sie mit diesem Schritt fertig sind, speichern Sie die Datei durch Drücken von <Strg> + X, gefolgt von Y und <Enter>.

Starten Sie das askpass1.yaml-Playbook wie folgt:

$ ansible-playbook playbooks/askpass1.yaml

Wie Sie sehen können, kann ich mich nicht mit dem Host verbinden. Sie können sehen, dass dies daran liegt, dass ich den Befehl ansible-playbook nicht mit der Option -ask-pass ausgeführt habe.

Führen Sie das askpass1.yaml playbook mit der Option -ask-pass wie folgt aus:

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

Wie Sie sehen können, fragt Ansible nach einem SSH-Passwort. Geben Sie Ihr SSH-Passwort ein und drücken Sie <Eingabe>.

Das Playbook askpass1.yaml sollte nun erfolgreich ausgeführt werden.

Ansible sudo Passwort Login für Playbooks

Die Option -ask-pass fragt nur nach dem SSH-Login-Passwort. Was aber, wenn Sie auch das sudo-Passwort eingeben möchten? In den nächsten Schritten erfahren Sie, wie Sie dies tun können.

Erstellen Sie zunächst ein neues Playbook askpass2.yaml im Verzeichnis playbooks/ wie folgt:

$ nano playbooks/askpass2.yaml

Geben Sie die folgenden Zeilen in die Datei askpass2.yaml ein.

– 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: Kopiere index.html Datei auf Server
copy:
src: ../files/index.html
dest: /var/www/html/index.html
Modus: 0644
Besitzer: www-data
Gruppe: www-data

Hier habe ich den Befehl become: True verwendet, um Ansible anzuweisen, dieses Playbook mit sudo-Rechten auszuführen. Wenn Sie mit diesem Schritt fertig sind, speichern Sie die Datei askpass2.yaml durch Drücken von <Strg> + X, gefolgt von Y und <Enter>.

Erstellen Sie eine index.html-Datei im Verzeichnis files/ wie folgt:

$ nano files/index.html

Tippen Sie die folgenden HTML-Codes in die index.html-Datei:

<!DOCTYPE html>
<html>
<head>
<title>Homepage</title>
</head>
<body>
<h1>Hello World</h1>
<p>Es funktioniert</p>
</body>
</html>

Wenn Sie mit diesem Schritt fertig sind, speichern Sie die Datei durch Drücken von <Strg> + X gefolgt von Y und <Eingabe>.

Sie können das playbook askpass2.yaml mit der Option -ask-pass wie folgt ausführen:

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

Sie werden dann wie zuvor nach dem SSH-Passwort gefragt.

Aber auch wenn Sie das SSH-Passwort angeben, kann das Playbook nicht ausgeführt werden. Der Grund dafür ist, dass Sie Ansible anweisen müssen, sowohl nach dem sudo-Passwort als auch nach dem SSH-Passwort zu fragen.

Sie können Ansible anweisen, nach dem sudo-Passwort zu fragen, indem Sie die Option -ask-become-pass verwenden, während Sie das Playbook wie folgt ausführen:

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

Nun wird Ansible Sie nach dem SSH-Passwort fragen.

Als nächstes wird Ansible Sie nach dem sudo-Passwort fragen. Wenn Ihr sudo-Passwort dasselbe ist wie das SSH-Passwort (was sehr wahrscheinlich ist), dann lassen Sie es leer und drücken Sie <Enter>.

Wie Sie sehen, wurde das Playbook erfolgreich ausgeführt.

Automatisches passwortbasiertes SSH-Login und sudo-Passwort-Login konfigurieren

Es kann sein, dass Sie passwortbasiertes SSH und sudo-Login verwenden möchten, aber nicht jedes Mal das SSH-Passwort und sudo-Passwort eingeben möchten, wenn Sie ein Playbook ausführen. Wenn das der Fall ist, dann ist dieser Abschnitt für Sie.

Um passwortbasiertes SSH-Login und sudo-Login zu verwenden, ohne nach den Passwörtern gefragt zu werden, müssen Sie nur die Host-Variablen ansible_ssh_pass und ansible_become_pass oder Gruppenvariablen in Ihre Inventarisierungsdatei hinzufügen.

Zunächst öffnen Sie die Inventarisierungsdatei hosts wie folgt:

$ nano hosts

Wenn Sie mehrere Hosts in Ihrer Inventarisierungsdatei haben und jeder der Hosts unterschiedliche Passwörter hat, dann fügen Sie die Variablen ansible_ssh_pass und ansible_become_pass als Host-Variablen (nach jedem Host) wie folgt hinzu.

Ersetzen Sie secret durch Ihr SSH- und sudo-Passwort.

Wenn alle oder einige der Hosts das gleiche Passwort haben, dann können Sie die Variablen ansible_ssh_pass und ansible_become_pass als Gruppenvariablen hinzufügen, wie im folgenden Beispiel gezeigt.

Hier habe ich nur einen Host, also habe ich die Variablen ansible_ssh_pass und ansible_become_pass für die Gruppe all (alle Hosts in der Inventardatei) hinzugefügt. Sie können diese Variablen aber auch für andere spezifische Gruppen hinzufügen.

Nachdem Sie die Variablen ansible_ssh_pass und ansible_become_pass in der Hosts-Inventarisierungsdatei hinzugefügt haben, speichern Sie die Hosts-Inventarisierungsdatei durch Drücken von <Strg> + X, gefolgt von Y und <Eingabe>.

Sie können nun das askpass2.yaml-Playbook wie folgt ausführen:

$ ansible-playbook playbooks/askpass2.yaml

Wie Sie sehen, wurde das Playbook erfolgreich ausgeführt, obwohl es nicht nach dem SSH-Passwort oder dem sudo-Passwort gefragt hat.

So verwenden Sie sshpass für passwortbasierte SSH- und sudo-Anmeldung in Ansible. Danke, dass Sie diesen Artikel gelesen haben!