Files
ansible-playbooks/roles/bootstrap/README.md
T
2026-07-18 21:34:51 +02:00

4.7 KiB
Raw Blame History

Rolle bootstrap

Ersteinrichtung (Provisioning) eines frischen Debian-Hosts. Die Rolle legt den Admin-User an, installiert Basispakete, härtet die SSH-Konfiguration, verteilt autorisierte SSH-Keys, konfiguriert Tastaturlayout, MOTD, Bash-Aliase und sysctl, und bindet optional die Rollen docker und monitoring ein.

Siehe auch das Top-Level-Playbook bootstrap.yml sowie die Repo-README.

Voraussetzungen

  • Debian-Ziel-Host
  • SSH-Zugang als Benutzer, der become darf (Playbook nutzt user: admin)
  • ansible.posix Collection (für sysctl-Modul)

Einbindung

Die Rolle wird normalerweise über das Top-Level-Playbook bootstrap.yml aufgerufen, kann aber auch direkt per include_role/import_role eingebunden werden:

- hosts: all
  become: true
  user: admin
  roles:
    - role: bootstrap
ansible-playbook -i inventory/dmc12.yml --vault-password-file .vault_pass bootstrap.yml

Funktionsweise

tasks/main.yml reiht die Subtasks nacheinander aus und bindet am Ende bedarfsabhängig die Rollen docker und monitoring ein:

  1. install-basicpackages.yml Basispakete installieren
  2. create-admin-user.yml Admin-User anlegen + sudoers
  3. set-motd.yml MOTD via fastfetch (tags: motd)
  4. set-keyboardlayout.yml QWERTZ-Layout
  5. install-openssh.yml OpenSSH Server/Client (tags: ssh)
  6. configure-ssh.yml sshd_config härtbar (tags: ssh)
  7. add-ssh-keys.yml authorized_keys verteilen (tags: ssh)
  8. setup-bashrc.yml nützliche Aliase (tags: bashrc)
  9. configure-sysctl.yml vm.swappiness = 10 (tags: sysctl)
  10. import_role: docker (sofern nicht skip_docker)
  11. import_role: monitoring (sofern nicht skip_monitoring)

Installierte Basispakete

fastfetch, htop, curl, wget, git, sudo, console-setup, qemu-guest-agent, cron, net-tools, tcpdump, locales-all.

SSH-Härtung

Die Vorlage templates/sshd.conf.j2 deaktiviert Root-Login und Passwort-Authentifizierung, erlaubt ausschließlich Publickey-Auth und setzt restriktive Forwarding-/Logging-Optionen. Nach Änderung wird der sshd via Handler neu gestartet.

Variablen

Variable Typ Default Beschreibung
admin_authorized_keys list siehe defaults/ Liste von { key, comment }-Einträgen für admin
admin_password string siehe defaults/ SHA-512-Hash des Admin-Passworts

Steuer-Variablen (keine Defaults, optional setzen)

Variable Typ Default Beschreibung
skip_docker bool false Wenn true, wird die docker-Rolle übersprungen
skip_monitoring bool false Wenn true, wird die monitoring-Rolle übersprungen
ssh_service_name string sshd Name des SSH-Service (überschrieben bspw. für ssh)

admin_authorized_keys wird auch pro Inventory in group_vars/external.yml überschrieben. Der Handler Restart sshd verwendet ssh_service_name, sofern gesetzt (z. B. ssh für gitea/ipam in inventory/dmc12.yml).

Templates

Template Ziel
sshd.conf.j2 /etc/ssh/sshd_config (validiert via sshd -T)
authorized_keys.j2 /home/admin/.ssh/authorized_keys
sudoers-admin.j2 /etc/sudoers.d/10-admin (validiert via visudo -cf)
keyboard.j2 /etc/default/keyboard

Handler

Handler Auslöser
Restart sshd Änderung an sshd_config
Reload keyboard layout Änderung an /etc/default/keyboard

Tags

motd, ssh, bashrc, sysctl ermöglichen das gezielte Re-Apply einzelner Teile, z. B.:

ansible-playbook bootstrap.yml -i inventory/dmc12.yml -t ssh

Abhängigkeiten

  • docker (optional, via import_role)
  • monitoring (optional, via import_role)

Hinweise

  • configure-sysctl.yml wird auf LXC-Containern übersprungen (virtualization_type != "lxc").
  • setup-bashrc.yml legt Aliase für alle regulären User inkl. root an.
  • install-openssh.yml entfernt ggf. das Meta-Paket ssh vor der Installation von openssh-server/openssh-client.