Einführung
Small Frame Studio benötigt Ava und Noah auf zwei vorbereiteten Hosts, während Maya ihren bestehenden Zugang und ihre Notizen behält. Du erstellst mit Ansible begrenzte Mitarbeiterkonten, nutzt deren echte SSH-Identitäten und machst aus einer einzelnen Deklaration eine wiederverwendbare Personalliste.
Du benötigst grundlegende Terminalnavigation und Übung beim Lesen eines kleinen Ansible-Inventars und Playbooks. Dieses Lab erklärt die benötigten Begriffe zu Linux-Konten, SSH-Schlüsseln, Rechten, lookup und Schleifen vor ihrer Verwendung. Alle Übungsschlüssel, vertrauenswürdigen Hostidentitäten und die separate Collection sind vorbereitet.
Ermögliche Ava die Anmeldung
In diesem Schritt erstellst du ein Kurskonto auf zwei Studiohosts, autorisierst seinen Übungsschlüssel und speicherst mit dieser Identität eine echte Arbeitsdatei.
Small Frame Studio speichert unterschiedliche redaktionelle Notizen auf web1 und web2. Maya arbeitet bereits auf beiden; Ava benötigt Zugriff, ohne Mayas Arbeit zu verlieren. Die vorbereiteten Ziele sind zwei SSH-Container, die sich den Kernel der Trainings-VM teilen, keine unabhängigen VMs. Ansible läuft auf dem Controller und verbindet sich als vorbereitetes automation-Konto. Mitarbeiterkonten existieren ausschließlich innerhalb dieser Kursziele.
Öffne Controller. Die Sitzung beginnt im Projektverzeichnis. Mit diesem Befehl kehrst du auch nach einem falschen Verzeichniswechsel dorthin zurück:
cd /home/labex/project
Lies das Inventar und die genehmigten Personaldaten mit cat. Es zeigt Dateien an, ohne sie zu ändern:
cat inventory.ini
cat approved-staff.json
Die endgültige Liste enthält studio_ava und studio_noah für beide Hosts. Wir beginnen mit Ava und erweitern dieselbe Arbeit anschließend auf eine Liste. Erhalte diese genehmigten Eingaben, das Inventar und die vorbereiteten SSH-Einstellungen unverändert.
SSH authentifiziert einen Benutzer auf einem entfernten Host. Ein öffentlicher Schlüssel kann auf dem Ziel installiert werden; der passende private Schlüssel bleibt beim Client und beweist seinen Besitz. training-keys/ enthält hier neue, kurzlebige Übungsschlüssel, niemals echte persönliche Zugangsdaten. Dateien mit der Endung .pub sind öffentlich; die gleichnamige Datei ohne diesen Zusatz ist privat. Kopiere keine privaten Schlüssel auf Ziele und gib ihren Inhalt nicht aus.
Lies die vorbereitete Clientkonfiguration:
cat clients.conf
Jeder Alias, etwa web1-maya, wählt Ziel, Kursbenutzer und privaten Schlüssel. -F clients.conf weist ssh an, diese Projektkonfiguration zu verwenden. Sie legt vertrauenswürdige Hostschlüssel fest, deaktiviert Passwortabfragen und Verbindungswiederverwendung und bietet nur die gewählte Identität an. Der Hostschlüssel identifiziert den Server; der öffentliche Benutzerschlüssel autorisiert die Person. Das sind unterschiedliche Aufgaben. Deaktiviere keine der beiden Vertrauensprüfungen.
Beobachte zuerst eine funktionierende Mitarbeiteridentität. Text in einfachen Anführungszeichen ist ein Befehl, der auf dem entfernten Host läuft. Das Semikolon trennt dort zwei Befehle: Benutzer identifizieren und danach die lokale Arbeitsdatei lesen.
ssh -F clients.conf web1-maya 'id -un; cat work/briefing.txt'
Es erscheinen studio_maya und die Notizen des Riverside-Studios. Lies den anderen Host über eine neue Verbindung:
ssh -F clients.conf web2-maya 'id -un; cat work/briefing.txt'
Die Identität bleibt gleich, die Notizen stammen jedoch vom Hill-Studio und unterscheiden sich. Erhalte beide Dateien. Avas Verbindung soll jetzt scheitern, weil Konto und Berechtigung noch fehlen:
ssh -F clients.conf web1-ava 'id -un'
Erwarte Permission denied (publickey) und Rückgabestatus 255, keine Passwortabfrage. Eine Zeitüberschreitung oder Hostschlüsselwarnung ist ein anderes Problem: Kehre ins Projektverzeichnis zurück und prüfe unverändertes Inventar und Konfiguration, statt das SSH-Vertrauen zu schwächen.
Ein Linux-Benutzer besitzt ein Heimatverzeichnis, eine Anmeldeshell und eine primäre Gruppe. Das user-Modul erstellt das Konto und auf diesen vorbereiteten Zielen die gleichnamige primäre Gruppe. create_home: true erstellt sein Heimatverzeichnis. become: true nutzt die autorisierte Rechteerhöhung des vorbereiteten automation-Kontos auf den Zielen; die LabEx-Anmeldung wird nicht verändert.
Schreibe ein vollständiges Playbook. In diesem Here-Dokument ersetzt > die genannte Controllerdatei; der in Anführungszeichen stehende Begrenzer YAML verhindert Shell-Erweiterungen. Der abschließende Begrenzer muss allein am Zeilenanfang stehen. Bei einem falsch eingegebenen Block wiederholst du den ganzen Block und ersetzt dadurch diese Datei. Wartet die Shell noch auf einen fehlenden Abschlussbegrenzer, brich die unvollständige Eingabe mit Ctrl+C ab und führe den vollständigen Block am normalen Prompt erneut aus. YAML nutzt Leerzeichen zur Verschachtelung und - für Listeneinträge.
cat > access.yml <<'YAML'
- name: Give Ava access to the studio hosts
hosts: all
become: true
gather_facts: false
tasks:
- name: Create Ava's course account
ansible.builtin.user:
name: studio_ava
shell: /bin/bash
create_home: true
- name: Keep Ava's home private
ansible.builtin.file:
path: /home/studio_ava
state: directory
owner: studio_ava
group: studio_ava
mode: '0750'
- name: Create Ava's work directory
ansible.builtin.file:
path: /home/studio_ava/work
state: directory
owner: studio_ava
group: studio_ava
mode: '0750'
- name: Authorize Ava's public key
ansible.posix.authorized_key:
user: studio_ava
key: "{{ lookup('file', 'training-keys/ava.pub') }}"
state: present
YAML
Das file-Modul verwaltet Eigentümer und Rechte von Verzeichnissen, nicht den Inhalt vorhandener Arbeitsdateien. Modus 0750 gibt dem Eigentümer vollen Zugriff, der primären Gruppe Lese-/Durchgangsrechte und anderen Benutzern keinen Zugriff. Anführungszeichen um die Ziffern verhindern eine numerische YAML-Interpretation. lookup liest einen öffentlichen Schlüssel auf dem Controller; doppelte geschweifte Klammern werten den Ausdruck aus. state: present fügt diesen Schlüssel hinzu und erhält andere Schlüssel. Es ersetzt nicht die gesamte Schlüsseldatei des Kontos.
Module mit dem Präfix ansible.builtin werden mit Core geliefert. ansible.posix.authorized_key gehört zu einer separaten, für dieses Projekt offline installierten Collection. Es erstellt das Benutzerverzeichnis .ssh mit Modus 0700 und authorized_keys mit Modus 0600; beide gehören dem Benutzer und seiner primären Gruppe. Du musst weder eine Collection installieren noch SSH-Servereinstellungen bearbeiten.
Prüfe zunächst die YAML-/Playbook-Syntax:
ansible-playbook access.yml --syntax-check
Lies bei einem Syntaxfehler die gemeldete Datei und Zeile, vergleiche Leerzeichen und Anführungszeichen mit dem vollständigen Block, schreibe ihn neu und wiederhole die Prüfung. Die VM muss nicht zurückgesetzt werden. Eine Vorhersage im Check-Modus ist bei dieser ersten Erstellung nicht zuverlässig: Eine spätere Schlüsselaufgabe kann kein Konto nutzen, dessen Erstellung eine frühere Aufgabe nur vorhergesagt hat. Wende die Erstellung tatsächlich an und nutze Check-Modus, sobald die Konten existieren:
ansible-playbook access.yml
Beide Hosts müssen ohne unerreichbare Ziele oder fehlgeschlagene Aufgaben abschließen. Melde dich jetzt als Ava an und speichere ihre tatsächliche Identität. Innerhalb der entfernten Anführungszeichen begrenzt umask 027 neue Dateien auf höchstens 0640; > schreibt die Ausgabe von id in die Ankunftsdatei, cat liest sie zurück. Diese Einstellung gilt nur für die Shell dieses entfernten Befehls.
ssh -F clients.conf web1-ava 'umask 027; id -un > work/arrival.txt; cat work/arrival.txt'
ssh -F clients.conf web2-ava 'umask 027; id -un > work/arrival.txt; cat work/arrival.txt'
Beide geben studio_ava aus. Du hast eine echte Mitarbeiteranmeldung und einen Dateischreibvorgang genutzt, nicht nur eine erfolgreiche Ansible-Zusammenfassung. Mayas getrennte Dateien und ihr Zugang müssen weiterhin funktionieren.
Nutze die Deklaration für eine Personalliste
In diesem Schritt ersetzt du wiederholte Kontodetails durch strukturierte Daten und eine Schleife, fügst Noah hinzu und bestätigst Konvergenz, ohne vorhandene Arbeit zu verändern.
Bleibe in Controller unter /home/labex/project. Jeder Personaleintrag benötigt einen Kursbenutzernamen und den Controllerpfad seines öffentlichen Schlüssels. Das vorbereitete Verzeichnis group_vars ist leer. Eine Datei namens group_vars/all.yml stellt Variablen für alle Inventarhosts bereit. Schreibe die genehmigte Liste mit zwei Personen:
cat > group_vars/all.yml <<'YAML'
staff:
- name: studio_ava
key_file: training-keys/ava.pub
- name: studio_noah
key_file: training-keys/noah.pub
YAML
Eine passende host_vars/web1.yml kann stattdessen eine Liste nur für web1 bereitstellen. Hostwerte überschreiben gemeinsame Gruppenvorgaben. Diese Einheit nutzt dieselbe Liste auf beiden Hosts; die Challenge liefert unterschiedliche genehmigte Hostlisten. Die wiederverwendbaren Aufgaben müssen dafür nicht geändert werden.
Eine Schleife wiederholt eine Aufgabe für jeden Eintrag in staff. item.name liest den Namen des aktuellen Eintrags, item.key_file seinen öffentlichen Schlüsselpfad. Dieselbe Liste steuert Konten, Verzeichnisse und Berechtigungen. Ersetze das Playbook für eine Person durch die wiederverwendbare Version:
cat > access.yml <<'YAML'
- name: Manage the approved studio staff
hosts: all
become: true
gather_facts: false
tasks:
- name: Create each course account
ansible.builtin.user:
name: "{{ item.name }}"
shell: /bin/bash
create_home: true
loop: "{{ staff }}"
- name: Keep each home private
ansible.builtin.file:
path: "/home/{{ item.name }}"
state: directory
owner: "{{ item.name }}"
group: "{{ item.name }}"
mode: '0750'
loop: "{{ staff }}"
- name: Create each work directory
ansible.builtin.file:
path: "/home/{{ item.name }}/work"
state: directory
owner: "{{ item.name }}"
group: "{{ item.name }}"
mode: '0750'
loop: "{{ staff }}"
- name: Add each approved public key
ansible.posix.authorized_key:
user: "{{ item.name }}"
key: "{{ lookup('file', item.key_file) }}"
state: present
loop: "{{ staff }}"
YAML
Behalte das standardmäßig nicht exklusive Schlüsselverhalten bei. Eine exklusive Schlüsseloperation in einer Schleife kann einen anderen gültigen Schlüssel aus einem vorherigen Durchlauf entfernen. Dieses Projekt fügt bestimmte Schlüssel hinzu und entfernt später einen bestimmten alten Schlüssel; es ersetzt nicht die vollständigen Schlüsselsätze aller Personen.
Prüfe die Syntax und wende dann an. Noah existiert noch nicht, daher gilt die Einschränkung des Check-Modus bei der Ersterstellung weiterhin.
ansible-playbook access.yml --syntax-check
ansible-playbook access.yml
Ava sollte keine neuen Änderungen benötigen; Noah wird auf beiden Zielen erstellt. Lies die Ergebnisse pro Eintrag und bestätige unreachable=0 und failed=0 in beiden Zusammenfassungen. Nutze Noahs tatsächliche Identität, um seine eigene Arbeitsdatei zu erstellen:
ssh -F clients.conf web1-noah 'umask 027; id -un > work/arrival.txt; cat work/arrival.txt'
ssh -F clients.conf web2-noah 'umask 027; id -un > work/arrival.txt; cat work/arrival.txt'
Beide geben studio_noah aus. Avas Ankunftsdateien bleiben ihre eigenen, Mayas Notizen unverändert. Lies sie über die ursprünglichen Identitäten:
ssh -F clients.conf web1-ava 'cat work/arrival.txt'
ssh -F clients.conf web2-ava 'cat work/arrival.txt'
ssh -F clients.conf web1-maya 'cat work/briefing.txt'
ssh -F clients.conf web2-maya 'cat work/briefing.txt'
Jetzt existieren alle benötigten Benutzer. --check sagt unterstützte Änderungen voraus, ohne sie anzuwenden:
ansible-playbook access.yml --check
Beide Zusammenfassungen sollten changed=0, unreachable=0 und failed=0 melden. Wiederhole die echte Deklaration:
ansible-playbook access.yml
Auch sie sollte keine Änderungen melden. Das ist Idempotenz für die deklarierten Konten, Verzeichnisse und Schlüsselberechtigungen. Normale SSH-Zugriffe können weiterhin Systemanmeldungen protokollieren. Dieselbe Schleife kann eine andere genehmigte Personalliste verarbeiten, ohne ihre Implementierung umzuschreiben.
Prüfe bei einer fehlgeschlagenen Anmeldung zunächst den gewählten Alias und die Identität. Vergleiche dann öffentlichen Schlüsselpfad und Benutzername mit den genehmigten Daten. Korrigiere die Controllerdeklaration und wende sie erneut an. Behebe fehlende Berechtigungen nicht, indem du private Schlüssel auf Ziele kopierst, Heimatverzeichnisse für alle beschreibbar machst oder das Serververtrauen ausschaltest.
Zusammenfassung
Du hast Kurskonten, private Arbeitsverzeichnisse und Berechtigungen für öffentliche Schlüssel erstellt, Arbeit über echte SSH-Identitäten gespeichert, Wiederholungen für einzelne Personen durch eine strukturierte Schleife ersetzt und Konvergenz bestätigt, während bestehende Zugänge und Notizen erhalten blieben.



