GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Gewusst wie:Erste Schritte mit Ansible

Einführung

Ansible ist ein Systemverwaltungstool, das die Verwaltung mehrerer Geräte von einem zentralen Gerät aus ermöglicht. Es ist vergleichbar mit Tools wie Puppet oder Chef, aber während diese Pakete die Installation von Agenten auf den Client-Systemen erfordern, funktioniert Ansible, indem es Befehle über ssh weiterleitet, ohne dass überhaupt Agenten erforderlich sind. Wir werfen einen Blick auf einige der administrativen Aufgaben, die Ansible ausführen kann, damit Sie sich ein besseres Bild davon machen können, ob Ansible das Richtige für Sie sein könnte.


.

Voraussetzungen

  • Ein Linux-, BSD- oder OSX-Steuergerät.
  • SSH-Zugriff (Firewall und Anmeldeinformationen) auf Client-Geräte von Ihrem Steuergerät aus. Ansible bevorzugt die Verwendung von SSH-Schlüsseln für den Zugriff auf Client-Geräte, aber wir zeigen Ihnen auch Optionen mit Benutzername und Passwort.
  • Python 2.6 oder 2.7 auf dem Steuergerät installiert.

.

Installation

Ansible ist über die Paketmanager der großen Linux/BSD/OSX-Distributionen verfügbar. Es ist auch über das Pip-Installationsprogramm von Python verfügbar.

CentOS/Fedora:

sudo yum install ansible

Ubuntu (Sie müssen zuerst das Ansible PPA hinzufügen):

sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
sudo apt-get install ansible

Arch-Linux:

pacman -S ansible

FreeBSD:

sudo pkg install ansible

Python-Paketmanager, pip (OSX-Benutzer können auch mit pip installieren):

sudo pip install ansible

Zugriff auf Ansible-Clients einrichten

Hosts

Einer der Vorteile der Verwendung von Ansible ist die Möglichkeit, mehrere Clients von einem Steuergerät aus zu verwalten – von derselben Terminalschnittstelle aus. Sie können verschiedene Gruppen von Client-Servern basierend auf Funktion, Standort und/oder Betriebssystem angeben, indem Sie Gruppen in /etc/ansible/hosts erstellen Datei.

[mailservers]
smtp.orl-fl.example.com
smtp.dal-tx.example.com

[db_servers]
db.orl-fl.example.com
db.sfo-ca.example.com

[orlando]
smtp.orl-fl.example.com
db.orl-fl.examle.com

[nameservers]
ns[01:12].example.com

Ein in eckige Klammern eingeschlossener Name [] definiert einen Gruppennamen und schließt Hosts in die folgende Liste ein. Sie können auch einen fortlaufenden Bereich innerhalb eines Hostnamenmusters mit eckigen Klammern und einem Doppelpunkt angeben, wie in ns[01:12].example.com oben.

Ein Client kann in mehreren Gruppen vorhanden sein. Der Gruppenname fungiert als Alias ​​für die Gruppenliste, wodurch es einfacher wird, auf die Gruppe von Servern zu verweisen, auf die Sie mit Ihrem speziellen Ansible-Befehl oder Playbook abzielen.
.

ssh-Schlüssel

Ansible funktioniert am besten, wenn Ihr Kontrollserver – derjenige, von dem aus Sie Ihre Ansible-Befehle ausführen – ssh-Schlüssel verwenden kann, um auf Client-Hosts zuzugreifen. Wenn Sie einen Ansible-Befehl ohne zusätzliche Optionen ausführen, versucht er standardmäßig, über SSH-Schlüssel auf Remote-Clients zuzugreifen.

Tipp:Wenn Sie Ihren privaten SSH-Schlüssel mit einer Passphrase gesichert haben, kann es unbequem und ineffizient sein, diese Passphrase jedes Mal eingeben zu müssen, wenn Sie sie für jede SSH-Sitzung entschlüsseln müssen, die Sie mit Ansible öffnen. Um diesen Vorgang zu vereinfachen, öffnen Sie eine separate Shell mit ssh-agent . Wenn Sie einen privaten Schlüssel in diese Shell importieren, müssen Sie Ihre Passphrase nur einmal eingeben, um den unverschlüsselten privaten Schlüssel hinzuzufügen.

ssh-agent bash
ssh-add ~/.ssh/id_rsa

Der erste Befehl öffnet eine neue Bash-Shell. Das ssh-add Der Befehl fordert Sie zur Eingabe der Passphrase Ihres privaten Schlüssels auf und importiert dann den privaten RSA-Schlüssel in diese Shell. Sie können natürlich den entsprechenden privaten Schlüssel ersetzen, wenn Sie id_ecdsa verwenden oder id_dsa , zum Beispiel.

.

.

ssh-Zugriff (ohne ssh-Schlüssel)

Wenn Sie Client-Server haben, auf denen keine SSH-Schlüssel eingerichtet sind, können Sie Ansible weiterhin mit Ihrem aktuellen Benutzer verwenden und zur Eingabe Ihres Benutzerkennworts auffordern. Zum Beispiel möchten wir vielleicht den ping verwenden Modul, um zu überprüfen, ob alle unsere Hosts in den db_servers Gruppe reagieren.

ansible db_servers -m ping --ask-pass

Dieser Befehl fragt zuerst nach dem ssh-Passwort des aktuellen Benutzers, das für den Zugriff auf alle Server in db_servers verwendet werden soll Gruppe, bevor Sie das Modul auf jedem Client ausführen.

Hinweis:Dieser Befehl erfordert, dass Ihr Benutzer auf jedem Client vorhanden ist, über SSH-Zugriff verfügt und dasselbe Passwort verwendet.

Auch der ping -Modul hat nichts mit dem ICMP-Ping zu tun, der die Netzwerkkonnektivität testet. Seine Verwendung mit ansible überprüft, ob ein Client-Server für den angegebenen Benutzer zugänglich ist und ob der Client-Server über eine Version von Python verfügt, mit der Ansible arbeiten kann. Der ping Modul sollte ein pong zurückgeben Antwort nach erfolgreichem Abschluss..

.

ssh-Zugriff (mit Passwort)

Standardmäßige Ansible-Befehle setzen außerdem voraus, dass Sie zusätzlich zur Verwendung von ssh-Schlüsseln passwortloses sudo verwenden. Wenn Sie Client-Server haben, die ein Passwort benötigen, um sudo-Zugriff zu erhalten, können Sie zusätzliche Optionen verwenden, um sudo zu werden und zur Eingabe eines sudo-Passworts aufzufordern. Also zum Beispiel alle Server in den mailservers neu zu starten Gruppe mit dem Benutzernamen username .

ansible mailservers -a "/sbin/reboot" -u username --become --ask-become-pass

Der --become Option gibt an, dass der Benutzer ein privilegierter Benutzer wird (sudo), und die Option --ask-become-pass Option fordert Ansible auf, nach dem Passwort zu fragen, um dieser privilegierte Benutzer zu werden, bevor der Befehl ausgeführt wird.

Der --become und --ask-become-pass options sind neuere Optionen (ab Ansible Version 1.9), die das ältere --sudo ersetzen sollen und --ask-sudo-pass (-K ) Optionen. Diese älteren Versionen funktionieren noch. Der Ersatz von sudo für become erweitert den Umfang dieser Optionen um die Integration mit Tools, die andere Mittel als sudo verwenden um die Rechteausweitung zu aktivieren.

.

Einige grundlegende Ansible CLI-Befehle

Während die eigentliche Stärke von Ansible in der Verwendung von Playbooks liegt, können Sie auch ansible ausführen Befehl, um eine schnelle Clientverwaltung für Fälle durchzuführen, in denen es keinen Sinn macht, ein Playbook zu erstellen, oder in denen Sie möglicherweise nur einen einzigen Befehl an eine Gruppe von Clientgeräten senden müssen.

Das ansible Befehl folgt dem Muster ansible [group] OPTIONS .
.

Yum-Updates ausführen

Wenn Sie zum Beispiel Yum-Updates auf den Servern in Ihren mailservers ausführen möchten group können Sie diese Aufgabe mit dem folgenden Ansible-Befehl erledigen:

ansible mailservers -m yum -a "name=* state=latest" --become

Dieser Befehl aktualisiert alle Server in den mailservers Gruppe mit dem yum Modul (-m ). Das -a Option gibt ein bestimmtes Argument in doppelten Anführungszeichen an – in diesem Fall werden alle installierten Pakete aktualisiert (unter Verwendung des * Platzhalter) auf den neuesten Stand.
.

Datei auf Clients kopieren

Sie können Ansible verwenden, um eine Datei an eine Gruppe von Client-Servern zu verteilen.

ansible orlando -m copy -a "src=/home/scripts/foo.sh dest=/opt/scripts/foo.sh"

Dieser Befehl ruft die copy auf Modul und gibt den src an (Quelle) und dest (Ziel) in Anführungszeichen für die Argumente. Der Quellspeicherort ist standardmäßig das Gerät, auf dem dieser Ansible-Befehl ausgeführt wird, und kann absolut oder relativ sein. Der Zielort ist der Ort auf dem Remote-Client-Gerät und muss immer absolut sein.

Sie können auch die copy verwenden Modul, um die Attribute der Datei, über die Sie kopieren, weiter zu verfeinern.

ansible orlando -m copy -a "src=/home/scripts/foo.sh dest=/opt/scripts/foo.sh owner=foo group=bar mode=0755"

Dieser Befehl ändert zusätzlich die Eigentümer-, Gruppen- und Dateiberechtigungen der Datei auf jedem Client in orlando Gruppe.
.

Shell-Befehl ausführen

Sie können auch ein Skript auf jedem Client mit der shell ausführen Modul.

ansible orlando -m shell -a '/opt/scripts/foo.sh >> /home/foo/bar.txt' 

Dieser Befehl würde foo.sh ausführen Skript und leiten Sie seine Ausgabe an /home/foo/bar.txt um Datei. Beachten Sie hier die einfachen Anführungszeichen. Sie benötigen einfache statt doppelte Anführungszeichen, damit Sie >> übergeben können Operator an die entfernte Shell.
.

Ein Ansible Amuse-Bouche

Es gibt viele weitere Befehle und Module, die Sie verwenden können, aber dieses Beispiel sollte eine gute Einführung dafür bieten, wie nützlich Ansible sein kann, wenn Sie auch nur eine kleine Anzahl von Servern verwalten. Wenn Sie sich in der manchmal wenig beneidenswerten Situation befinden, sich wiederholende Aufgaben in Ihrer Serverinfrastruktur ausführen zu müssen, hoffen wir, dass Ihnen diese Beispiele einen Vorgeschmack darauf gegeben haben, wie Ansible Ihnen helfen kann, intelligenter (und effizienter!) zu arbeiten.

Schauen Sie in Zukunft auf jeden Fall wieder bei uns vorbei, um weitere Artikel zur Serveradministration und anderen Dingen, die Sie mit Ansible machen können, zu erhalten. Atlantic.Net bietet eine breite Palette flexibler VPS-Hosting-Lösungen für ein kleines Start-up-Unternehmen bis hin zu einem gut etablierten Unternehmen.
.
.


Linux
  1. Erste Schritte mit Zsh

  2. Erste Schritte mit ls

  3. Erste Schritte mit PostgreSQL unter Linux

  4. Wie fange ich mit Juju an?

  5. Erste Schritte mit SSH unter Linux

Erste Schritte mit Ansible Playbooks

Erste Schritte mit Ansible Ad-hoc-Befehlen

Erste Schritte mit Nix Package Manager

Erste Schritte mit systemctl

Gewusst wie:Erste Schritte mit Ubuntu 14.04 LTS mit LAMP

Gewusst wie:Erste Schritte mit Ubuntu 14.04 LTS mit LEMP