pimvh.cloud_init
Anforderungen
- Ansible installieren:
sudo apt install python3
python3 -m ensurepip --upgrade
pip3 install ansible
- requirements.yaml installieren (dieses Rollenspiel nutzt pimvh.ssh_keygen):
ansible-galaxy install -r requirements.yaml
Benötigte Variablen
Überprüfen Sie die Variablen wie im Standard angezeigt.
cloud_init_machine_name: ""
cloud_init_ansible_user_passwd_hash: "" # der Hash des Passworts für den Ansible-Benutzer
cloud_init_github_token: ""
cloud_init_userdata:
hostname: hostname
fqdn: hostname.example.com
groups: []
users:
- name: mein Benutzer
gecos: Beschreibung meines Benutzers
shell: /bin/bash
sudo: ALL=(ALL) NOPASSWD:ALL # Passwortloses Sudo
groups: sudo # Mitglied von sudo
lock_passwd: false # Passwort entsperren
passwd: "{{ password_here | password_hash('sha512') }}"
ssh_authorized_keys: [] # optionale autorisierte Schlüssel
runcmd: [] # zusätzliche Befehle, die in cloud-init ausgeführt werden sollen
writefiles: [] # zusätzliche Dateien, die geschrieben werden sollen
packages: [] # zusätzliche Pakete, die installiert werden sollen
cloud_init_networkdata:
# IPs definieren und die `default routes` und `nameservers` unten verwenden
ipv4: << ipv4 >>
ipv6: << ipv6 >>
# --- ODER ---
# einen gesamten Netplan dumpen
# wie das folgende
netplan:
network:
version: 2
ethernets:
enp1s0:
dhcp4: false
addresses:
- << addr >>
gateway4: << addr >>
gateway6: << addr >>
nameservers:
addresses:
- << dns_server ip >>
cloud_init_netplan_routes:
- to: default
via: 1.0.0.1
- to: default
via: 2001:db8::11
cloud_init_netplan_nameservers:
addresses:
- 1.1.1.1
- 1.0.0.1
cloud_init_add_to_known_hosts: true
cloud_init_reboot_on_finish: true
cloud_init_enable_ssh_ca: true
# Meine Empfehlung ist, Lookup-Plugins wie folgt zu verwenden:
# cloud_init_ssh_host_ca_publickey: "{{ lookup('ansible.builtin.file', 'your_ca') }}"
# oder Variablen-Lookups wie folgt:
# "{{ lookup('ansible.builtin.vars', 'your_ca') }}"
cloud_init_ssh_host_ca_privatekey: ""
cloud_init_ssh_host_ca_privatekey_pass: ""
cloud_init_ssh_host_ca_publickey: ""
cloud_init_ssh_user_ca_publickeys: []
cloud_init_enable_ansible_pull: false
cloud_init_ansible_pull_repo_owner: ""
cloud_init_ansible_pull_repo_name: ""
cloud_init_ansible_pull_playbook_name: ""
cloud_init_ansible_pull_deploy_key_name: "Ansible-pull Bereitstellungsschlüssel"
cloud_init_validity_period: 520w
cloud_init_ssh_ca_runcmd:
# CA-Nutzung auf dem Server konfigurieren
- echo "@cert-authority * $(cat /etc/ssh/host_ca.pub)" >> /etc/ssh/ssh_known_hosts
# den öffentlichen Schlüssel der Host-CA einfach entfernen
- rm -f /etc/ssh/host_ca.pub
# den neuen TrustedUserCAkey konfigurieren, indem die erstellte cloud-init ssh-Konfiguration angehängt wird
- echo "TrustedUserCAKeys /etc/ssh/ssh_trusted_user_ca_keys" >> /etc/ssh/sshd_config.d/50-cloud-init.conf
# sshd neu starten, um die Änderungen wirksam zu machen
- systemctl restart sshd
Beispiel-Playbook
hosts:
- foo
roles:
- pimvh.cloud_init
TLDR - Was passiert, wenn ich das ausführe
- Überprüfen, ob die erforderlichen Variablen definiert sind
- Verzeichnis erstellen, um cloud-init-Dateien zu starten
- Github-Hostschlüssel abrufen (wenn angefordert)
- SSH-Schlüsselpaar für Ansible-Pull generieren (wenn angefordert)
- SSH-Host-CA und Benutzer-CA konfigurieren (wenn angefordert)
- Zertifikatschlüssel auf dem Controller signieren
- Ansible-Pull konfigurieren, indem requirements.yaml des repo_url in die cloud-init-Konfiguration eingefügt wird (wenn angefordert)
- cloud_init templatisieren
- Signierte Zertifikate in die cloud-init-Konfiguration templatisieren
- Erforderliche cloud-init userdata templatisieren
- cloud-init networkdata templatisieren
- Ansible-Pull requirements.yaml templatisieren
- Github-Bereitstellungsschlüssel zum angeforderten Ansible-Pull-Repository hinzufügen (wenn angefordert)
- Ansible-Pull als Ansible-Benutzer auf dem System ausführen (wenn angefordert)
- SSH-CA zu bekannten Hosts hinzufügen (wenn angefordert)
Zukünftige Verbesserungen
- Einen besseren Weg finden, um kurzfristigen Zugriff auf Github mit einer anderen Authentifizierungsmethode zu erhalten.
Quellen
Ein Teil der SSH-CA-Logik basiert auf dem folgenden Blog
Über das Projekt
Role to configure cloud-init.
Installieren
ansible-galaxy install pimvh.cloud_init
Lizenz
gpl-3.0
Downloads
1.5k
Besitzer