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.
.
.