Einführung
Ava hat einen alten Studiolaptop ersetzt. Beide vorbereiteten Hosts akzeptieren dessen Schlüssel weiterhin neben ihrem aktuellen und ihrem Ersatzschlüssel. Entferne nur die Berechtigung des alten Geräts und erhalte Konto und ursprüngliche Notizen.
Diese unabhängige Einheit setzt die Benutzer-, Schlüssel-, lookup- und Schleifenpraxis aus Gib einem Teammitglied Zugriff voraus. Eigene Übungsschlüssel und bestehende Konten sind vorbereitet; Dateien oder Verbindungen der vorherigen VM werden nicht übernommen.
Entferne den Schlüssel eines alten Geräts
In diesem Schritt widerrufst du Avas alten Geräteschlüssel auf beiden Studiohosts, weist die Ablehnung neuer Verbindungen nach und erhältst ihren aktuellen Schlüssel, Ersatzschlüssel und ursprüngliche Arbeit.
Diese Einheit hat eine eigene frische Umgebung. Ava besitzt bereits Konten und Arbeit auf beiden Zielen. Jedes Konto akzeptiert derzeit drei Übungsschlüssel: aktuell, Ersatz und altes Gerät. Du entfernst nur die alte Berechtigung. Das Entfernen eines Schlüssels verhindert neue Authentifizierung damit; es beendet keine bereits authentifizierte Verbindung. Dieses Lab prüft neue Verbindungen und behauptet keine Beendigung bestehender Sitzungen.
Öffne Controller und wechsle ins Projektverzeichnis. Dieser Befehl hilft auch nach einem versehentlichen Verzeichniswechsel:
cd /home/labex/project
Lies die vorbereiteten Eingaben und Clientaliase:
cat approved-staff.json
cat clients.conf
Das genehmigte Kurskonto ist studio_ava. Zu widerrufen ist training-keys/ava-old.pub; training-keys/ava.pub und training-keys/ava-backup.pub bleiben autorisiert. Schlüssel mit .pub sind öffentlich; passende private Schlüssel bleiben auf diesem Übungsclient. Die Aliase wählen Host, Benutzer und genauen Schlüssel. -F clients.conf wählt diese Projektkonfiguration mit festgelegtem Vertrauen. Jeder ssh-Aufruf baut eine neue Verbindung auf. Erhalte Inventar, Clienteinstellungen, Hostvertrauen und Übungsschlüssel unverändert.
Beobachte vor der Zugriffsänderung das normale Verhalten. Innerhalb der einfachen Anführungszeichen führt die entfernte Shell id und danach cat aus, durch ein Semikolon getrennt:
ssh -F clients.conf web1-ava 'id -un; cat work/briefing.txt'
ssh -F clients.conf web2-ava 'id -un; cat work/briefing.txt'
Die Identität ist auf beiden studio_ava; die Riverside- und Hill-Notizen unterscheiden sich. Prüfe auch den Ersatzschlüssel:
ssh -F clients.conf web1-ava-backup 'id -un'
ssh -F clients.conf web2-ava-backup 'id -un'
Das alte Gerät wird jetzt noch akzeptiert:
ssh -F clients.conf web1-ava-old 'id -un'
ssh -F clients.conf web2-ava-old 'id -un'
Einen Schlüssel nur aus einer Liste hinzuzufügender Schlüssel zu löschen, fordert seine Entfernung nicht an. Beobachte den Unterschied sicher mit einer leeren Ergänzungsliste. Das Here-Dokument schreibt eine vollständige Controllerdatei: > ersetzt die Datei, der in Anführungszeichen stehende Begrenzer YAML verhindert Shell-Erweiterungen. Der Abschlussbegrenzer steht allein am Zeilenanfang. Wartet die Shell auf einen fehlenden Abschluss, brich die unvollständige Eingabe mit Ctrl+C ab und führe den vollständigen Block am normalen Prompt erneut aus. Eine Schleife über [], eine leere YAML-Liste, hat keine Einträge zu bearbeiten.
cat > additions.yml <<'YAML'
- name: Add listed keys without removing other grants
hosts: all
become: true
gather_facts: false
vars:
keys_to_add: []
tasks:
- name: Add a listed key
ansible.posix.authorized_key:
user: studio_ava
key: "{{ lookup('file', item) }}"
state: present
loop: "{{ keys_to_add }}"
YAML
ansible-playbook additions.yml
Die Schlüsselaufgabe wird auf beiden Hosts übersprungen und keiner wird geändert. Sie hat nicht alle möglichen Berechtigungen untersucht und nicht aufgeführte Schlüssel entfernt. Das alte Gerät kann sich weiterhin anmelden:
ssh -F clients.conf web1-ava-old 'id -un'
Drücke jetzt den tatsächlichen Widerruf aus. group_vars/all.yml liefert diese Liste an beide Inventarhosts und verändert nicht die vorbereitete Genehmigungsdatei. Jedes Objekt nennt einen Kursbenutzer und einen öffentlichen Schlüsselpfad auf dem Controller. Durch Wiederholen eines falsch geschriebenen Dateiblocks ersetzt du diese Controllerdatei; die VM muss nicht zurückgesetzt werden.
cat > group_vars/all.yml <<'YAML'
revoked_keys:
- name: studio_ava
key_file: training-keys/ava-old.pub
YAML
Nutze das gelernte Schlüsselmodul mit state: absent. Es entfernt diesen Schlüssel und erhält Konto und andere Berechtigungen. Eine Schleife verarbeitet jede aufgeführte Entfernung. Doppelte geschweifte Klammern lösen den aktuellen Eintrag auf, lookup liest den öffentlichen Schlüssel auf dem Controller. Die Collection ist für das Projekt offline installiert. Verwende keinen exklusiven Ersatz, lösche keine Heimatverzeichnisse, sperre keine Passwörter und ändere den SSH-Dienst der Plattform nicht.
cat > revoke.yml <<'YAML'
- name: Revoke only the approved old device keys
hosts: all
become: true
gather_facts: false
tasks:
- name: Remove each listed old public key
ansible.posix.authorized_key:
user: "{{ item.name }}"
key: "{{ lookup('file', item.key_file) }}"
state: absent
loop: "{{ revoked_keys }}"
YAML
Prüfe die Syntax. Lies bei einem YAML-Fehler die genannte Zeile, vergleiche Einrückung und Anführungszeichen mit dem vollständigen Block und schreibe nur diese Controllerdatei neu.
ansible-playbook revoke.yml --syntax-check
Diese Konten existieren bereits, deshalb kann der unterstützte Check-Modus das Entfernen vorhersagen. --diff würde öffentliche Schlüsselzeilen ausgeben, die für diese Vorschau nicht nötig sind. Nutze --check:
ansible-playbook revoke.yml --check
Beide Hosts sollten eine Änderung vorhersagen. Der Check-Modus hat die echte Berechtigung noch nicht widerrufen. Wende sie an:
ansible-playbook revoke.yml
Beide Hosts müssen ohne unerreichbare Ziele oder fehlgeschlagene Aufgaben abschließen. Die nächsten beiden Verbindungen sollen mit Permission denied (publickey) und Rückgabestatus 255 scheitern:
ssh -F clients.conf web1-ava-old 'id -un'
ssh -F clients.conf web2-ava-old 'id -un'
Eine Zeitüberschreitung, verweigerte Netzwerkverbindung oder Hostschlüsselwarnung beweist keinen Widerruf. Der Server muss verfügbar bleiben, die erlaubten Schlüssel müssen weiterhin funktionieren. Stelle neue Verbindungen mit aktuellem und Ersatzschlüssel her, um beide ursprünglichen Dateien zu lesen:
ssh -F clients.conf web1-ava 'id -un; cat work/briefing.txt'
ssh -F clients.conf web2-ava 'id -un; cat work/briefing.txt'
ssh -F clients.conf web1-ava-backup 'id -un; cat work/briefing.txt'
ssh -F clients.conf web2-ava-backup 'id -un; cat work/briefing.txt'
Alle vier müssen als studio_ava erfolgreich sein und die jeweiligen ursprünglichen Notizen zeigen. Erhalte Bytes, Eigentümer und Modus 0640; Heimat-/Arbeitsverzeichnisse bleiben auf 0750, .ssh auf 0700 und authorized_keys auf 0600. Die Dateien gehören studio_ava und seiner primären Gruppe. Das bestehende Schlüsselmodul erhält diese vorbereiteten sicheren Rechte.
Wiederhole die echte Deklaration und danach ihre Vorhersage:
ansible-playbook revoke.yml
ansible-playbook revoke.yml --check
Beide Zusammenfassungen sollten changed=0, unreachable=0 und failed=0 zeigen. Ein korrekter Widerruf ändert die tatsächliche Berechtigung gezielt, statt nur eine erfolgreiche Zusammenfassung oder leere Controllerliste zu erzeugen. Korrigiere bei einem falschen Schlüsselpfad die Controllerdaten. Stelle einen versehentlich entfernten gültigen Schlüssel mit dem zuvor gelernten state: present wieder her und wende dann die richtige gezielte Entfernung an. Leere zur Wiederherstellung nicht die gesamte Schlüsseldatei und mache sie nicht für alle beschreibbar.
Zusammenfassung
Du hast eine ausgelassene Ergänzung von einem ausdrücklichen Widerruf unterschieden, eine öffentliche Schlüsselberechtigung mit state absent entfernt, die echte Ablehnung neuer Verbindungen geprüft und aktuelle/Ersatzanmeldungen samt beiden ursprünglichen Arbeitsdateien erhalten. Eine unveränderte Deklaration konvergierte ohne unnötige Änderungen.



