So konfigurieren Sie von Ansible verwaltete Knoten und führen Ad-hoc-Befehle aus – Teil 3
In den beiden vorherigen Artikeln dieser Ansible-Reihe haben wir die Kernkomponenten von Ansible und das Einrichten eines Ansible-Steuerknotens erläutert. In diesem Teil 3 zeigen wir, wie Sie von Ansible verwaltete Knoten so konfigurieren können, dass sie Ad-hoc-Befehle auf Remote-Hosts ausführen.
Richten Sie die passwortlose SSH-Authentifizierung für von Ansible verwaltete Knoten ein
Um unser letztes Thema noch einmal zusammenzufassen: Die Verwaltung von Remote-Hosts mit Ansible erfordert die Einrichtung einer passwortlosen SSH-Authentifizierung zwischen dem Ansible-Kontrollknoten und den verwalteten Hosts. Dazu gehört die Generierung eines Schlüsselpaars (öffentliches und privates SSH-Schlüsselpaar) auf dem Ansible Control-Knoten und das Kopieren des öffentlichen Schlüssels auf alle Remote-Hosts. Dies wird ein entscheidender Schritt in die Zukunft sein und Ihre Arbeit erheblich erleichtern.
Konfigurieren Sie die Rechteausweitung auf verwalteten Knoten
Wenn Sie als normaler Benutzer angemeldet sind, müssen Sie möglicherweise bestimmte Aufgaben auf verwalteten Knoten ausführen, für die erhöhte Berechtigungen oder Root-Berechtigungen erforderlich sind. Zu diesen Aufgaben gehören die Paketverwaltung, das Hinzufügen neuer Benutzer und Gruppen sowie das Ändern von Systemkonfigurationen, um nur einige zu nennen. Um dies zu erreichen, müssen Sie bestimmte Anweisungen im Playbook aufrufen, um die Aufgaben als privilegierter Benutzer auf den Remote-Hosts auszuführen.
werden
Mit Ansible können Sie auf dem verwalteten Knoten zu einem anderen Benutzer als dem aktuell angemeldeten Benutzer werden. Die Direktive become:yes
erweitert Ihre Berechtigungen und ermöglicht Ihnen die Ausführung von Aufgaben erfordern Root-Rechte wie das Installieren und Aktualisieren von Paketen und das Neustarten des Systems.
Stellen Sie sich ein Playbook httpd.yml
vor, das den Apache-Webserver wie gezeigt installiert und startet:
---
- name: install and start Apache webserver
hosts: webservers
tasks:
- name: install httpd
yum: name=httpd state=latest
become: yes
- name: check httpd status
service: name=httpd state=started
Die become: yes
-Direktive ermöglicht es Ihnen, Befehle als Root-Benutzer auf dem Remote-Host auszuführen.
Werden_Benutzer
Eine weitere Anweisung, mit der Sie ein anderer Benutzer werden können, ist become_user. Dadurch können Sie beim Anmelden zu einem Sudo-Benutzer auf dem Remote-Host wechseln und nicht zu dem Benutzer, als den Sie sich angemeldet haben.
Um beispielsweise einen Befehl als tecmint-Benutzer auf der Fernbedienung auszuführen, verwenden Sie die Anweisung wie gezeigt.
- name: Run a command as the apache user
command: somecommand
become: yes
become_user: tecmint
Werden_Methode
Diese Anweisung überschreibt die in der Datei ansible.cfg festgelegte Standardmethode, die normalerweise auf sudo eingestellt ist.
werden_Flaggen
Diese werden auf Spiel- oder Aufgabenebene verwendet, z. B. wenn Sie zu einem Benutzer wechseln müssen, wenn die Shell auf nologin eingestellt ist.
Zum Beispiel,
- name: Run a command as nobody
command: somecommand
become: true
become_method: su
become_user: nobody
become_flags: '-s /bin/sh'
Befehlszeilenoptionen in der Rechteausweitung
Werfen wir einen Blick auf einige der Befehlszeilenoptionen, mit denen Sie Ihre Berechtigungen beim Ausführen von Befehlen erweitern können:
--ask-become-pass
,-K
– Dies fordert Sie zur Eingabe des Passworts des Sudo-Benutzers auf dem Remote-System auf, mit dem Sie eine Verbindung herstellen möchten.
ansible-playbook myplaybook.yml --ask-become-pass
--become
,-b
– Dies ermöglicht Ihnen, die Aufgabe als Root-Benutzer auszuführen, ohne nach einem Passwort zu fragen.
ansible-playbook myplaybook.yml --become
--become-user=BECOME_USER
– Es ermöglicht Ihnen, Aufgaben als ein anderer Benutzer auszuführen.
ansible-playbook myplaybook.yml --become-user=tecmint
Validieren Sie eine funktionierende Konfiguration mit Ad-hoc-Ansible-Befehlen
Manchmal möchten Sie möglicherweise schnelle und einfache Aufgaben auf Remote-Hosts oder -Servern in Ansible ausführen, ohne unbedingt ein Playbook erstellen zu müssen. In diesem Fall müssten Sie einen Ad-hoc-Befehl ausführen.
Was ist ein Ad-hoc-Befehl?
Ein ansibler Ad-hoc-Befehl ist ein einzeiliger Befehl, mit dem Sie einfache Aufgaben auf einfache, aber effiziente Weise ausführen können, ohne Playbooks erstellen zu müssen. Zu diesen Aufgaben gehören das Kopieren von Dateien zwischen Hosts, das Neustarten von Servern, das Hinzufügen und Entfernen von Benutzern sowie die Installation eines einzelnen Pakets.
In diesem Tutorial untersuchen wir verschiedene Anwendungen von Ansible Ad-Hoc-Befehlen. Wir werden die Inventardatei unten für eine Demonstration verwenden.
[webservers]
173.82.115.165
[database_servers]
173.82.202.239
Grundlegende Verwendung von Ad-hoc-Befehlen
Die grundlegendste Verwendung von Ansible-Adhoc-Befehlen ist das Pingen eines Hosts oder einer Gruppe von Hosts.
ansible -m ping all
Im obigen Befehl ist der Parameter -m
die Moduloption. Ping ist der Ad-hoc-Befehl und der zweite Parameter all repräsentiert alle Hosts in der Inventardatei. Die Ausgabe des Befehls wird unten angezeigt:
Um eine bestimmte Gruppe von Hosts anzupingen, ersetzen Sie den Parameter „all“ durch den Gruppennamen. Im folgenden Beispiel testen wir die Konnektivität mit Hosts in der Gruppe „Webserver“.
ansible -m ping webservers
Darüber hinaus können Sie das Attribut -a
verwenden, um reguläre Linux-Befehle in doppelten Anführungszeichen anzugeben. Um beispielsweise die Systemverfügbarkeit von Remote-Systemen zu überprüfen, führen Sie Folgendes aus:
ansible -a "uptime" all
Um die Festplattennutzung von Remote-Hosts zu überprüfen, führen Sie Folgendes aus:
ansible -a "df -Th" all
Es gibt Hunderte und Aberhunderte von Modulen, die Sie mit dem Adhoc-Befehl verwenden können. Um die gesamte Liste der Module mit ihren Beschreibungen anzuzeigen, führen Sie den folgenden Befehl aus.
ansible-doc -l
Um detaillierte Informationen zu einem bestimmten Modul anzuzeigen, führen Sie den Befehl aus.
ansible-doc module_name
Um beispielsweise nach weiteren Details zum Yum-Modul zu suchen, führen Sie Folgendes aus:
ansible-doc yum
Verwalten von Paketen/Diensten mit Ansible
Ansible-Adhoc-Befehle können für die Installation und Entfernung von Paketen mithilfe der Paketmanager yum und apt verwendet werden.
Um den Apache-Webserver auf dem CentOS 7-Host in der Gruppe „Webserver“ in der Inventardatei zu installieren, führen Sie den folgenden Befehl aus:
ansible webservers -m yum -a "name=httpd state=present"
Um die Installation des Apache-Webservers zu überprüfen, melden Sie sich beim Remote-Client an und führen Sie ihn aus.
rpm -qa | grep httpd
Um Apache zu deinstallieren, ändern Sie einfach den Status von vorhanden in abwesend.
ansible webservers -m yum -a "name=httpd state=absent"
Um die Entfernung von httpd zu bestätigen, führen Sie erneut Folgendes aus:
rpm -qa | grep httpd
Wie beobachtet, wurden Apache-Webserverpakete gelöscht.
Erstellen von Benutzern und Gruppen mit Ansible
Beim Anlegen von Benutzern ist das Modul „Benutzer“ hilfreich. Geben Sie den Befehl aus, um einen neuen Benutzer james mit dem Passwort redhat auf dem Clientsystem „database_server“ zu erstellen.
ansible database_server -m user -a "name=james password=redhat"
Um die Erstellung des neuen Benutzers zu bestätigen, führen Sie den folgenden Befehl aus:
ansible database_servers -a "id james"
Um den Benutzer zu entfernen, führen Sie den folgenden Befehl aus:
ansible database_servers -m user -a "name=james state=absent"
Privilegieneskalation
Wenn Sie Ansible als regulärer Benutzer ausführen, bietet Ansible eine Rechteausweitung auf Remote-Hosts mithilfe der Option --become
zum Erwerb von Root-Rechten und der Option -k
zur Eingabe des Kennworts.
Um beispielsweise den Ansible-Adhoc-Befehl „netstat -pnltu“ mit der privilegierten Option –-become
und der Option -K
auszuführen, um zur Eingabe aufzufordern Geben Sie das Passwort des Root-Benutzers ein, um den Befehl auszuführen.
ansible webservers -m shell -a 'netstat -pnltu' --become -K
Um ein anderer Benutzer als Root zu werden, verwenden Sie das Attribut --become-user
.
Um beispielsweise „df -Th“ als tecmint-Benutzer auf den Remote-Hosts auszuführen und zur Eingabe des Kennworts aufzufordern, führen Sie Folgendes aus:
ansible all -m shell -a 'df -Th' --become-user tecmint -K
Sammeln von Fakten über Hostsysteme
Unter Fakten versteht man detaillierte Informationen über ein System. Dazu gehören unter anderem Informationen zur IP-Adresse, Systemarchitektur, Speicher und CPU.
Um Informationen über Remote-Hosts abzurufen, führen Sie den folgenden Befehl aus:
ansible all -m setup
Dateiübertragung/Dateien kopieren
Ansible verwendet das Modul copy, um Dateien sicher vom Ansible-Steuerelement auf mehrere Remote-Hosts zu kopieren.
Nachfolgend finden Sie ein Beispiel für einen Kopiervorgang:
ansible webservers -m copy -a "src=/var/log/secure dest=/tmp/"
Der Befehl kopiert die Datei /var/log/secure im Ansible Control-Knoten auf Remote-Hosts in der Webservergruppe im Ziel /tmp.
Sie können das Dateimodul verwenden, um Berechtigungen und Dateieigentümer zu ändern.
ansible webservers -m file -a "dest=/tmp/secure mode=600"
Darüber hinaus können Sie die Eigentümer- und Gruppenargumente wie gezeigt anhängen:
ansible webservers -m file -a "dest=/tmp/secure mode=600 owner=tecmint group=tecmint"
Sie können auch Verzeichnisse erstellen, ähnlich wie mkdir -p
wie gezeigt.
ansible webservers -m file -a "dest=/path/to/directory mode=755 owner=tecmint group=tecmint state=directory"
Zum Beispiel,
ansible webservers -m file -a "dest=/home/tecmint/data mode=755 owner=tecmint group=tecmint state=directory"
Abschluss
In diesem Artikel beleuchten wir, wie Sie verwaltete Knoten so konfigurieren können, dass sie Ansible-Ad-hoc-Befehle zur Verwaltung von Remote-Hosts ausführen. Wir hoffen, dass Sie es nützlich fanden. Probieren Sie es aus und lassen Sie uns wissen, wie es gelaufen ist.