pimvh.cloud_init

Test cząstki

Wymagania

  1. Zainstalowany Ansible:
sudo apt install python3
python3 -m ensurepip --upgrade
pip3 install ansible
  1. 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