Co-authored-by: DerLinkman <derlinkman@gmail.com> Reviewed-on: #1
4.0 KiB
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.ymlsowie 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/dmc12.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:
validate-authorized-keys.yml– stellt das.ssh-Verzeichnis des eingeloggten Users sicher (Mode0700).add-goodkeys.yml– fügt jeden Key ausgood_keysperlineinfilezurauthorized_keyshinzu (idempotent). Benachrichtigt HandlerCleanup CommentsundAdd Comment.remove-badkeys.yml– entfernt jeden Key ausbad_keysperlineinfile(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_filewird 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.