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
- Installation von sshpass auf Ubuntu/Debian
- Installation von sshpass auf CentOS 8/RHEL 8
- Einrichten eines Ansible-Projektverzeichnisses
- Testen der passwortbasierten SSH-Anmeldung in Ansible
- Ansible Passwortbasierte SSH-Anmeldung für Playbooks
- Ansible sudo Passwort Login für Playbooks
- Automatisches passwortbasiertes SSH-Login und sudo-Passwort-Login konfigurieren
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:
Nun installieren Sie sshpass mit folgendem Befehl:
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:
Nachfolgend installieren Sie das EPEL-Repository-Paket mit dem folgenden Befehl:
Das EPEL-Repository-Paket sollte nun installiert und das EPEL-Repository aktiviert sein.
Aktualisieren Sie den DNF-Paket-Repository-Cache erneut, wie folgt:
Installieren Sie sshpass über den folgenden Befehl:
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:
Navigieren Sie wie folgt in das Projektverzeichnis:
Erstellen Sie wie folgt eine Hosts-Inventarisierungsdatei:
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:
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:
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:
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:
Geben Sie die folgenden Zeilen in die Datei askpass1.yaml playbook file:
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:
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:
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:
Geben Sie die folgenden Zeilen in die Datei askpass2.yaml ein.
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:
Tippen Sie die folgenden HTML-Codes in die index.html-Datei:
<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:
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:
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:
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:
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!