Files
DerLinkman 30f3e9a4c6 rename dmc12 inventory to cloudlorean and vault admin_password
- replace inventory/dmc12.yml with cloudlorean.yml (+ group_vars) and update
  all README/AGENTS call examples and the inventory table
- move admin_password hash into encrypted vault.yml; remove plaintext copies
  from roles/bootstrap/defaults and group_vars/external.yml
- bootstrap.yml loads vault.yml via vars_files (same pattern as monitoring)
- monitoring: PSK config/registration updates, docker role defaults,
  os-updates logging/reboot refinements, ansible.cfg/execute.sh tweaks
- add .project-wiki knowledge base and .github agent instructions
2026-09-09 14:14:18 +02:00
..
2024-11-22 20:33:29 +01:00

Rolle manage-ssh-keys

Hardening-Rolle zur Verwaltung autorisierter SSH-Schlüssel. Sie fügt erwünschte ("Good") Keys hinzu und entfernt unerwünschte ("Bad") Keys aus der authorized_keys-Datei des Zielbenutzers.

Siehe auch das Playbook playbooks/hardening/manage-ssh-keys.yml sowie die Repo-README.

Voraussetzungen

  • Debian-Ziel-Host
  • SSH-Zugang als Zielbenutzer (Default: admin)
  • lineinfile-/blockinfile-Module (Bordmittel)

Einbindung

- hosts: all
  user: admin
  roles:
    - role: manage-ssh-keys
ansible-playbook -i inventory/cloudlorean.yml playbooks/hardening/manage-ssh-keys.yml

Good/Bad-Keys können per Inventory überschrieben oder über Umgebungsvariablen übergeben werden (siehe auskommentiertes Beispiel im Playbook):

# vars:
#   good_keys: "{{ lookup('env', 'good_keys') | from_json }}"
#   bad_keys: "{{ lookup('env', 'bad_keys') | from_json }}"

Funktionsweise

tasks/main.yml steuert den modularen Ablauf:

  1. validate-authorized-keys.yml – stellt das .ssh-Verzeichnis des eingeloggten Users sicher (Mode 0700).
  2. add-goodkeys.yml – fügt jeden Key aus good_keys per lineinfile zur authorized_keys hinzu (idempotent). Benachrichtigt Handler Cleanup Comments und Add Comment.
  3. remove-badkeys.yml – entfernt jeden Key aus bad_keys per lineinfile (state: absent). Benachrichtigt ebenfalls die Handler.

Die Handler bereinigen alle Kommentarzeilen (^#.*$) und fügen einen eindeutigen "Modified by Ansible"-Block mit Datum/Uhrzeit ein.

Variablen

Variable Typ Default Beschreibung
ssh_user string admin (Referenz) Zielbenutzer – Aktionen laufen als dieser User
good_keys list siehe defaults/ Liste erwünschter SSH-Keys (vollständige Key-Zeilen)
bad_keys list siehe defaults/ Liste unerwünschter SSH-Keys (vollständige Key-Zeilen)

Steuer-Variablen (keine Defaults)

Variable Typ Beschreibung
authorized_keys_file string Pfad zur authorized_keys-Datei (muss gesetzt sein)

authorized_keys_file wird im Playbook bzw. Inventory gesetzt und muss auf die Datei des Zielusers verweisen (z. B. /home/admin/.ssh/authorized_keys).

Default good_keys enthält die Admin-Keys (Niklas, Dennis, Generic Ansible). Default bad_keys enthält einen veralteten RSA-Key als Beispiel.

Templates

Keine Templates.

Handler

Handler Auslöser Beschreibung
Cleanup Comments Good/Bad-Key-Änderung Entfernt alle Kommentarzeilen (^#.*$) aus der Datei
Add Comment Good/Bad-Key-Änderung Fügt "Modified by Ansible on at " ein

Tags

Die Rolle vergibt keine eigenen Tags.

Abhängigkeiten

  • Keine weiteren Rollen.
  • Collections: ansible.builtin (Bordmittel).

Hinweise

  • Die Rolle ist idempotent: mehrfaches Ausführen führt zu keinem geänderten Zustand, wenn Keys bereits vorhanden/abwesend sind.
  • Good/Bad-Keys sind vollständige Key-Zeilen inkl. Typ, Key und Kommentar (z. B. ssh-ed25519 AAAA... user@host). Der Vergleich erfolgt zeilenbasiert.
  • Handler laufen erst am Ende des Playbook-Laufs – bei mehreren Key-Änderungen wird die Datei nur einmal bereinigt.
  • Vorsicht bei der Definition von bad_keys: zu weit gefasste Patterns könnten legitime Keys entfernen. Immer die exakte Key-Zeile angeben.