{"id":1653,"date":"2023-09-09T15:34:06","date_gmt":"2023-09-09T13:34:06","guid":{"rendered":"https:\/\/linux-bibel.at\/?p=1653"},"modified":"2023-09-09T15:34:09","modified_gmt":"2023-09-09T13:34:09","slug":"ansible-aufsetzen-und-anpassen-von-linux-systemen-aus-der-ferne","status":"publish","type":"post","link":"https:\/\/linux-bibel.at\/index.php\/2023\/09\/09\/ansible-aufsetzen-und-anpassen-von-linux-systemen-aus-der-ferne\/","title":{"rendered":"Ansible &#8211; Aufsetzen und anpassen von Linux-Systemen aus der Ferne"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Ansible ist ein Werkzeug um Linux-Systeme aus der Ferne anzupassen. Gerade in Unternehmen haben Administratoren es oft mit dem Aufsetzen und dem Anpassen von Betriebssystemen zu tun &#8211; ja, auch Linux l\u00e4uft in Unternehmen &#8211; auch in recht gro\u00dfen. Und ja, ich habe damit zu tun.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ansible hat den Vorteil &#8211; man kann damit nicht nur ein System auf einem Mal konfigurieren, dies ist etwa bei\u00a0SSH (<em>Secure Shell<\/em>)\u00a0der Fall. Mittels Ansible kann ich beliebig viele Linux-Systeme zur gleichen Zeit anpassen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gleich einmal zu Beginn, auch mit Ansible arbeitet man am\u00a0Terminal\u00a0&#8211; und auch hier gilt es zu wissen, was man tut. Dieser Artikel wird nicht an einem Tag fertig sein, bis die ersten groben Themen besprochen sind, bleibt das Thema gesperrt &#8211; anschlie\u00dfend kann auch jeder beitragen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ansible ist \u00fcbrigens die Distribution vollkommen egal &#8211; Sie k\u00f6nnen mit einem Debian, Ubuntu oder openSUSE warten und umgekehrt. Optimal genutzt wird Ansible, wenn die Clients statische IP-Adressen haben.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ansible installieren<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Unter auf Debian basierenden Linux-Distributionen installieren Sie diese Software wie \u00fcblich \u00fcber die\u00a0Paket-Verwaltung\u00a0durch das Paket &#8222;<strong>ansible<\/strong>&#8222;. M\u00f6chten Sie die aktuellste Version der Software nutzen, installieren Sie diese am besten \u00fcber das\u00a0Python-Repository\u00a0durch das Paket &#8222;<strong>ansible<\/strong>&#8222;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Den Server vorbereiten<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zu Beginn gilt es einen Rechner auszuw\u00e4hlen, dieser dient als Server &#8211; so gesehen als Wartungsmaschine f\u00fcr die anderen Rechner, die es zu konfigurieren gilt. Auf diesem wird auch Ansible installiert. Wichtig nat\u00fcrlich &#8211; auf den Clients muss man einen administrativen Zugang haben.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Auf diesem erstellt man sich jetzt unter &#8222;<em>\/etc\/ansible\/<\/em>&#8220; &#8211; das Verzeichnis gilt es erst manuell anzulegen &#8211; am einfachsten als\u00a0Admin\u00a0am Terminal:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir \/etc\/ansible<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dort erstellt man sich eine &#8222;<strong>hosts<\/strong>&#8222;-Datei, ebenfalls am Terminal, mit administrativen Rechten:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>touch \/etc\/ansible\/hosts<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Diese Datei bef\u00fcllt man anschlie\u00dfend mit den entsprechenden Hostnamen &#8211; wieder mit administrativen Rechten am Terminal:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/ansible\/hosts<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Beispiel:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>host_1\nhost_2\nhost_3<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die Datei wird mit\u00a0<strong><kbd>Strg+o<\/kbd><\/strong>\u00a0gespeichert, mit\u00a0<strong><kbd>Eingabe<\/kbd><\/strong>\u00a0wird best\u00e4tigt und mit\u00a0<strong><kbd>Strg+x<\/kbd><\/strong>\u00a0wird der Editor geschlossen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Anschlie\u00dfend legt man auf dem Server &#8211; etwa im Home-Verzeichnis eine Datenbank an &#8211; eine reine Textdatei mit der Endung &#8222;<strong>.yaml<\/strong>&#8222;. Diese bef\u00fcllt man anschlie\u00dfend nach folgendem Schema:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>all:\n     hosts:\n            client_1:\n                    ansible_host: client_1\n                    ansible_host: client_2\n                    ansible_host: client_3<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ich nenne die Datei jetzt ganz einfach einmal &#8222;<strong>inventory.yaml<\/strong>&#8222;. Bevor man mit Ansible auf den entfernten Rechnern arbeiten kann, gilt es Informationen \u00fcber diese zu sammeln. Dies geschieht \u00fcber den Befehl:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ansible -i inventory.yaml client_1 -m setup<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dies wird mit jedem Client wiederholt &#8211; es kann jetzt einige Sekunden dauern, bis man Informationen erh\u00e4lt. Die Daten werden f\u00fcr jeden Client automatisch gespeichert.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zur Sicherheit l\u00e4sst sich sp\u00e4ter jeder Rechner anpingen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ansible -i inventory.yaml all -m ping<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Jetzt k\u00f6nnen wir gleich einmal versuchen auf einem der Clients oder allen ein Paket zu installieren, ich nehme jetzt einfach einmal das Paket &#8222;<strong>zsh<\/strong>&#8220; &#8211; so lernen wir gleich einmal die Syntax ein wenig kennen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ansible -i inventory.yaml client_1 -m package -a \"name=zsh state=present\" -b --ask-become-pass<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dasselbe mit allen Clients:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ansible -i inventory.yaml clients -m package -a \"name=zsh state=present\" -b --ask-become-pass<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Mit &#8222;<strong>-i<\/strong>&#8220; geben wir die Datenbank an, mit &#8222;<strong><code>-m<\/code><\/strong>&#8220; das Modul &#8211; in diesem Beispiel nennt sich das Modul &#8222;<strong>package<\/strong>&#8220; &#8211; f\u00fcr Software-Pakete. Mit &#8222;<strong><code>-a<\/code><\/strong>&#8220; geben wir Argumente f\u00fcr das Modul an &#8211; handelt es sich um mehrere Argumente, setzt man diese unter Anf\u00fchrungszeichen. In diesem Beispiel sind es die Argumente &#8222;<strong>name=<\/strong>&#8220; (<em>um den Namen des Paketes anzugeben<\/em>) und &#8222;<strong>state=<\/strong>&#8220; den Status.<br>Ansible will wissen, was sein soll, wenn die Arbeit abgeschlossen ist &#8211; in diesem Fall &#8222;<strong>present<\/strong>&#8220; &#8211; das Paket soll zum Abschluss also installiert sein.<br>Mit der Option &#8222;<strong><code>-b<\/code><\/strong>&#8220; erzeugt man eine &#8222;<strong>privilege escalation<\/strong>&#8220; &#8211; diese erm\u00f6glicht es etwa ein Paket zu installieren. Durch &#8222;<strong><code>--ask-become-pass<\/code><\/strong>&#8220; erfolgt die Abfrage des root-Passwortes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SSH-Login-Begr\u00fc\u00dfung anpassen<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zum Anpassen der SSH-Login-Begr\u00fc\u00dfung ist die Datei &#8222;<em>\/etc\/motd<\/em>&#8220; verantwortlich &#8211; die Datei muss unter Umst\u00e4nden erst angelegt werden. Um komplette Zeilen auszutauschen, das Ansible-Modul &#8222;<strong>blockinfile<\/strong>&#8222;. Um mehrere Aufgaben auf einmal zu erledigen erstellt man sich ein Playbook &#8211; einfach eine Textdatei mit der Endung &#8222;<strong>.yaml<\/strong>&#8222;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Playbook-Inhalt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>- hosts: all\ntasks:\n- name: Leere Datei \"\/etc\/motd\" erstellen\nfile:\npath: \"\/etc\/motd\"\nstate: touch\nbecome: yes\n\n- name: Datei \"\/etc\/motd\" mit Begr\u00fc\u00dfung bef\u00fcllen\nblockinfile:\ndest: \/etc\/motd\nblock: |\nNeue Begrue\u00dfung von Robert Goedl auf rechnername!<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Wichtig &#8211; bei YAML auf die Einr\u00fcckungen (zwei Leerzeichen) achten.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Jetzt wird die Aufgabe ausgef\u00fchrt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ansible-playbook playbook.yaml -i inventory.yaml -b --ask-become-pass<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die Zeile &#8218;Neue Begrue\u00dfung von Robert Goedl auf rechnername!&#8216; l\u00f6schen:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das Playbook:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>- hosts: all\ntasks:\n- name: Zeile 'Neue Begrue\u00dfung von Robert Goedl auf rechnername!' aus '\/etc\/motd' entfernen\nlineinfile:\ndest: \/etc\/motd\nregexp: Neue Begrue\u00dfung von Robert Goedl auf rechnername!\nstate: absent<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die Zeile &#8220;Neue Begrue\u00dfung von Robert Goedl auf rechnername!&#8216; durch &#8218;Alte Begr\u00fc\u00dfung ersetzt!&#8216; ersetzen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das Playbook:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>- hosts: all\ntasks:\n- name: Zeile 'Neue Begrue\u00dfung von Robert Goedl auf rechnername!' durch 'Alte Begr\u00fc\u00dfung ersetzt!' ersetzen.\nlineinfile:\npath: \/etc\/motd\nsearch_string: 'Neue Begrue\u00dfung von Robert Goedl auf rechnername!'\nline: Alte Begr\u00fc\u00dfung ersetzt!<\/code><\/pre>\n<div class=\"pld-like-dislike-wrap pld-custom\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir\" data-post-id=\"1653\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Hoch.png\" alt=\"Gef\u00e4llt mir\" \/>\r\n            <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">    <\/span>\r\n<\/div><div class=\"pld-dislike-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-dislike-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir nicht\" data-post-id=\"1653\" data-trigger-type=\"dislike\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Runter.png\" alt=\"Gef\u00e4llt mir nicht\" \/>\r\n            <\/a>\r\n    <span class=\"pld-dislike-count-wrap pld-count-wrap\"><\/span>\r\n<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Ansible ist ein Werkzeug um Linux-Systeme aus der Ferne anzupassen. Gerade in Unternehmen haben Administratoren es oft mit dem Aufsetzen und dem Anpassen von Betriebssystemen zu tun &#8211; ja, auch Linux l\u00e4uft in Unternehmen &#8211; auch in recht gro\u00dfen. Und ja, ich habe damit zu tun. Ansible hat den Vorteil &#8211; man kann damit nicht [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1654,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,4],"tags":[12,7,15,6],"class_list":["post-1653","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-system","category-terminal","tag-kommandozeile","tag-shell","tag-system","tag-terminal"],"_links":{"self":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/1653","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/comments?post=1653"}],"version-history":[{"count":1,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/1653\/revisions"}],"predecessor-version":[{"id":1655,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/1653\/revisions\/1655"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media\/1654"}],"wp:attachment":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media?parent=1653"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/categories?post=1653"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/tags?post=1653"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}