Website-Suche

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.