So verwenden Sie das Ansible Shell -Modul

So verwenden Sie das Ansible Shell -Modul
Ansible wird häufig als Automatisierungsmotor für IT -Anforderungen wie Konfigurationsverwaltung, Cloud -Bereitstellung und vieles mehr verwendet. Automatisierung klingt großartig, aber wie erreicht Ansible es? Es verwendet „Module“, die für die Automatisierung verantwortlich sind. Ohne diese Module müsste ein Benutzer Ad -hoc -Befehle verwenden, um Aufgaben auszuführen.

Ad -hoc -Befehle sind jedoch nicht wiederverwendbar. Sicher, sie bieten Ihnen eine Möglichkeit, schnell individuelle Aufgaben auszuführen, aber sie können nicht wiederverwendet werden. Eine Analogie könnte gezeichnet werden, wenn der Spielbuchmodus wie ein Shell-Skript ist, während einzelne Befehle Einzellinien sind.

Apropos Shell, Ansible hat auch ein Shell -Modul. Dieses Modul wird verwendet, um Shell -Befehle auf Zielsystemen auszuführen. In diesem Leitfaden werden wir das Ansible -Shell -Modul durchgehen und Beispiele dafür zeigen, wie es verwendet werden kann.

Was ist das Shell -Modul??

Mit dem Ansible Shell -Modul kann der Benutzer komplexe Befehle mit Umleitung, Rohren usw. ausführen. Es nimmt einen Befehlsnamen an, seine Argumente mit White Space -Abgrenzern und führen ihn auf Remote -Hosts aus.

Es mag genau das gleiche klingen wie das Ansible -Befehlsmodul, aber der Unterschied besteht darin, dass die Befehle auf dem Host mit einer Shell ausgeführt werden. Das Shell -Modul hat auch Zugriff auf Umgebungsvariablen und spezielle Operatoren wie | &; usw. Noch besser, Sie können ganze Skripte mit dem Shell -Modul ausführen. Dennoch ist es allgemein bekannt unter Ansible -Benutzern, dass das Befehlsmodul eine sicherere und vorhersehbare Option ist als das Shell -Modul.

Schließlich ist es wichtig zu bedenken, dass dieses Modul nur mit Linux -Systemen funktioniert. Windows -Benutzer können Ansible verwenden.Fenster.win_shell an seiner Stelle. Lassen Sie uns auf die Details des Ansible Shell -Moduls eingehen.

Verwenden des Ansible Shell -Moduls

Bevor wir Befehle und Skripte ausführen, schauen wir uns die Parameter an, die Sie bei der Verwendung dieses Moduls übergeben müssen, um Werte zu übergeben.

  • Chdir - ändert das aktuelle Verzeichnis vor der Ausführung.
  • CMD - eine Zeichenfolge, die den zu ausgeführten Befehl zusammen mit seinen Argumenten enthält.
  • Ausführbar - erfordert einen absoluten Pfad, um die von Ihnen verwendete Shell zu ändern.
  • Entfernt - nimmt einen Dateinamen. Wird verwendet, um Schritte auszuschließen, wenn eine Datei nicht vorhanden ist.
  • STDIN - Lassen Sie den Benutzer den STDIN eines Befehls auf einen bestimmten Wert einstellen.
  • WARN - Nimmt Ja (Standard) oder nein, um Aufgabenwarnungen zu aktivieren oder zu deaktivieren.

Lassen Sie uns einige Beispiele für die Verwendung von Ansible Shell zu einigen Beispielen erhalten.

Beispiel 1: Ändern des Arbeitsverzeichnisses

Wenn Sie das Arbeitsverzeichnis ändern möchten, bevor Sie einen Befehl ausführen.

- Name: Ändern des Arbeitsverzeichnisses in Mydir

Ansible.gebaut.Shell: MyScript.Sh >> myLog.txt

Args:

chdir: mydir/

Nachdem wir ein Playbook erstellt haben, können Sie es mit dem Linux -Terminal ausführen, indem Sie ausgeführt werden:

Ansible-Playbook-Testbuch.YML

Beispiel 2: Befehlsausgabe extrahieren

Wenn Sie den Rückgabewert eines Shell -Befehls erfassen und speichern möchten, kann das Schlüsselwort Register verwendet werden.

- Name: Erstellen a .TXT -Datei in $ home

Shell: Echo "Rette mich!"> $ Home/Test.txt

Register: Shell_output

- Debug: var = Shell_output

Beispiel 3: Überprüfen des Datums

Beginnen wir zunächst das Datum auf unserem Remote -Server mit dem Namen test überprüfen. Beachten Sie, wie die Syntax des Shell -Moduls hier unterschiedlich ist. Dies ist nur eine weitere Möglichkeit, das Ansible Shell -Modul zu verwenden.

- Name: Überprüfen Sie das Datum

Hülse:

"Datum"

Register: DATECMD

Tags: datecmd

- Debug: msg = "datecmd.stdout "

Wir haben den Befehl Simple Datum verwendet, um das Datum in einem Remote -System zu überprüfen. Darüber hinaus wird die Ausgabe des Befehls (das Datum selbst) in ein Register mit dem Namen DATECMD zurückgegeben. Schließlich zeigen wir den Inhalt der Registervariablen datEcMD an, indem wir sein STDOut -Attribut drucken.

Beispiel 4: Ausführen mehrerer Befehle ausführen

In diesem Beispiel erstellen wir einige Textdateien in einem temporären Verzeichnis.

Aufgaben:

- Name: Erstellen mehrerer Dateien

Ansible.gebaut.Shell: |

echo "Ich bin Datei 1"> /tmp /myFile1.txt
echo "Ich bin Datei 2"> /tmp /myFile2.txt
echo "Ich bin Datei 3"> /tmp /myFile3.txt
wahr werden
Args:
chdir: /var /log

Hier haben wir Shellcode verwendet, um drei Dateien zu erstellen, nämlich MyFile1, MyFile2, und MyFile3. Das werden: True Line ermöglicht es Ihnen, der Benutzer des Remote -Hosts zu „werden“. Schließlich verabschieden wir uns ein Chdir -Argument und ändern das Verzeichnis.

Beispiel 5: Anwenden von Umleitung und Rohr

Lassen Sie uns nun sehen, wie Rohre und Umleitung im Ansible Shell -Modul funktioniert. Wir werden einen einfachen LS -Befehl mit etwas Vorverarbeitung durch awk ausführen. Darüber hinaus entfernen wir SED, um leere Linien zu entfernen. Am Ende werden wir die Ausgabe in eine Textdatei umleiten.

- Name: Nehmen Sie eine Liste des Verzeichnisses und füttern Sie es einer Datei

Hülse:

"ls -lrt/Apps | awk 'print $ 9' | sed '/^$/d'>/tmp/mydir.txt "

Register: LSOut

Tags: lsout

- Name: Zeigen Sie die Datei an

Shell: Cat /TMP /Dirlist.txt

Register: DisplayList

- Debug: msg = "displayList.STDOut_LINES "

Zuerst führen wir den oben genannten Befehl aus und speichern sein Ergebnis in Mydir.txt. Anschließend verwenden wir eine andere Befehlskatze, um den Inhalt der Datei in einem Register zu speichern. Schließlich wird diese Registervariable angezeigt.

Wie man Befehlsinjektion verhindern?

Wie wir bereits erwähnt haben, wird das Befehlsmodul als sicherere Möglichkeit, Dinge zu tun. Es hat jedoch etwas begrenzte Funktionalität. Wie kann man das Shell -Modul sicher verwenden??

Sie können den Zitatfilter verwenden, um die variablen Namen zu schützen, die Sie an das Shell -Modul vor der Befehlsinjektion übergeben. Im Folgenden ist ein Beispiel für diese Desinfektion angegeben.

- Name: Erstellen a .TXT mit dem Angebotsfilter

Shell: Echo "Ich bin sicher"> $ home/Safefile | zitieren .txt

Es ist eine gute Praxis, den Zitatfilter immer mit Ihren Variablen zu verwenden. Dadurch wird Hacker davon abgehalten, den Befehl zur Laufzeit zu ändern. Es ist sehr ähnlich wie die SQL -Injektion, aber solange Sie Sicherheitsvorkehrungen treffen, müssen Sie sich keine Sorgen machen!

Abschluss

Das Ansible Shell -Modul ist ein vielseitiges und leistungsfähiges Modul, das die Benutzersteuerung erhöht und die Remote -Konfiguration erheblich erleichtert. In diesem Artikel haben wir uns untersucht, was es tut, welche Parameter es hat und welche Argumente es benötigt und mehr. Hoffentlich sind Sie jetzt gut ausgestattet, um das Ansible Shell -Modul zu verwenden.