pimvh.cloud_init
Wymagania
- Zainstalowany Ansible:
sudo apt install python3
python3 -m ensurepip --upgrade
pip3 install ansible
- Zainstalowany plik requirements.yaml (ta rola wykorzystuje pimvh.ssh_keygen):
ansible-galaxy install -r requirements.yaml
Wymagane zmienne
Sprawdź zmienne, jak pokazano w domyślnych.
cloud_init_machine_name: ""
cloud_init_ansible_user_passwd_hash: "" # hash hasła dla użytkownika ansible
cloud_init_github_token: ""
cloud_init_userdata:
hostname: hostname
fqdn: hostname.example.com
groups: []
users:
- name: moja nazwa użytkownika
gecos: Opis mojego użytkownika
shell: /bin/bash
sudo: ALL=(ALL) NOPASSWD:ALL # sudo bez hasła
groups: sudo # członek grupy sudo
lock_passwd: false # odblokuj hasło
passwd: "{{ password_here | password_hash('sha512') }}"
ssh_authorized_keys: [] # opcjonalny autoryzowany klucz
runcmd: [] # dodatkowa komenda do uruchomienia w cloudinit
writefiles: [] # dodatkowe pliki do zapisania
packages: [] # dodatkowe pakiety do zainstalowania
cloud_init_networkdata:
# zdefiniuj IP i użyj poniższych `domyślnych tras` oraz `serwerów DNS`
ipv4: << ipv4 >>
ipv6: << ipv6 >>
# --- LUB ---
# zrzut całego netplanu
# jak poniżej
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
# Moje zalecenie to użycie wtyczek lookup, jak ta:
# cloud_init_ssh_host_ca_publickey: "{{ lookup('ansible.builtin.file', 'twój_ca') }}"
# lub wyszukiwanie zmiennych jak to:
# "{{ lookup('ansible.builtin.vars', 'twój_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: "Klucz wdrożeniowy Ansible-pull"
cloud_init_validity_period: 520w
cloud_init_ssh_ca_runcmd:
# skonfiguruj użycie ca na serwerze
- echo "@cert-authority * $(cat /etc/ssh/host_ca.pub)" >> /etc/ssh/ssh_known_hosts
# po prostu usuń publiczny klucz CAs hosta
- rm -f /etc/ssh/host_ca.pub
# skonfiguruj nowy klucz TrustedUserCAkey, dodając utworzoną konfigurację cloud-init ssh
- echo "TrustedUserCAKeys /etc/ssh/ssh_trusted_user_ca_keys" >> /etc/ssh/sshd_config.d/50-cloud-init.conf
# zrestartuj sshd, aby zmiany zaczęły działać
- systemctl restart sshd
Przykładowy playbook
hosts:
- foo
roles:
- pimvh.cloud_init
TLDR - Co się wydarzy, jeśli to uruchomię
- Sprawdzam, czy wymagane zmienne są zdefiniowane
- Tworzę katalog do rozpoczęcia plików cloud-init
- Pobieram klucze hostów z GitHub (gdy jest to wymagane)
- Generuję pary kluczy SSH do Ansible pull (gdy jest to wymagane)
- Konfiguruję Host CAs i User CAs (gdy jest to wymagane)
- Podpisuję klucze certyfikatów na kontrolerze
- Konfiguruję Ansible-pull, umieszczając requirements.yaml z repo_url w konfiguracji cloud-init (gdy jest to wymagane)
- Tworzę szablon cloud_init
- Wstawiam podpisane certyfikaty do konfiguracji cloud-init
- Wstawiam wymagane dane użytkownika cloud-init
- Wstawiam dane sieciowe cloud-init
- Wstawiam wymagania.yaml dla Ansible pull
- Dodaję klucz wdrożeniowy GitHub do żądanego repozytorium Ansiblepull (gdy jest to wymagane)
- Uruchamiam Ansible-pull jako użytkownika ansible w systemie (gdy jest to wymagane)
- Dodaję SSH CA do znanych hostów (gdy jest to wymagane)
Przyszłe ulepszenia
- Znalezienie lepszego sposobu na uzyskanie dostępu do GitHub na krótki okres, używając innej metody uwierzytelniania.
Źródła
Część logiki SSH CA opiera się na następującym blogu
Zainstaluj
ansible-galaxy install pimvh.cloud_init
Licencja
gpl-3.0
Pobrania
1.5k
Właściciel