some preps to make lbs.
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 0s
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 0s
This commit is contained in:
@@ -1,94 +0,0 @@
|
|||||||
- hosts: all
|
|
||||||
become: yes
|
|
||||||
vars:
|
|
||||||
# Задайте пути к ключам на вашей локальной машине (где запускается Ansible),
|
|
||||||
# предварительно скачав их с сервера step-ca
|
|
||||||
local_ssh_user_ca_pub_path: "~/.step/secrets/ssh_user_ca_key.pub"
|
|
||||||
local_ssh_host_ca_key_path: "~/.step/secrets/ssh_host_ca_key"
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
# --- ЭТАП 1: УПРАВЛЕНИЕ ПОЛЬЗОВАТЕЛЯМИ И КАТАЛОГАМИ ---
|
|
||||||
|
|
||||||
- name: Создание системной директории для принципалов
|
|
||||||
file:
|
|
||||||
path: /etc/ssh/auth_principals
|
|
||||||
state: directory
|
|
||||||
owner: root
|
|
||||||
group: root
|
|
||||||
mode: '0755'
|
|
||||||
|
|
||||||
- name: Создание локальных пользователей из списка проекта
|
|
||||||
user:
|
|
||||||
name: "{{ item.name }}"
|
|
||||||
shell: /bin/bash
|
|
||||||
create_home: yes
|
|
||||||
state: present
|
|
||||||
loop: "{{ project_users }}"
|
|
||||||
|
|
||||||
- name: Генерация файлов auth_principals для каждого пользователя
|
|
||||||
copy:
|
|
||||||
dest: "/etc/ssh/auth_principals/{{ item.name }}"
|
|
||||||
content: "{{ allowed_projects | join('\n') }}\n"
|
|
||||||
owner: root
|
|
||||||
group: root
|
|
||||||
mode: '0644'
|
|
||||||
loop: "{{ project_users }}"
|
|
||||||
|
|
||||||
- name: Настройка беспарольного sudo для администраторов проекта
|
|
||||||
copy:
|
|
||||||
dest: "/etc/sudoers.d/project-ssh-{{ item.name }}"
|
|
||||||
content: "{{ item.name }} ALL=(ALL) NOPASSWD:ALL"
|
|
||||||
validate: /usr/sbin/visudo -cf %s
|
|
||||||
mode: '0440'
|
|
||||||
loop: "{{ project_users }}"
|
|
||||||
when: item.sudo | bool
|
|
||||||
|
|
||||||
# --- ЭТАП 2: РАСКАТКА ДОВЕРИЯ К USER CA ---
|
|
||||||
|
|
||||||
- name: Копирование публичного ключа User CA на хост
|
|
||||||
copy:
|
|
||||||
src: "{{ local_ssh_user_ca_pub_path }}"
|
|
||||||
dest: /etc/ssh/ca.pub
|
|
||||||
owner: root
|
|
||||||
group: root
|
|
||||||
mode: '0644'
|
|
||||||
|
|
||||||
# --- ЭТАП 3: ХОСТОВЫЕ СЕРТИФИКАТЫ (Опционально, локальный выпуск) ---
|
|
||||||
# Мы генерируем сертификат прямо на машине администратора с помощью локального step-cli
|
|
||||||
# и копируем готовый сертификат на целевой сервер.
|
|
||||||
|
|
||||||
- name: Локальная генерация Host-сертификата для целевой ноды
|
|
||||||
delegate_to: localhost
|
|
||||||
become: no
|
|
||||||
shell: >
|
|
||||||
step ssh certificate {{ inventory_hostname }} /tmp/{{ inventory_hostname }}_host.pub
|
|
||||||
--host --sign --ca-key {{ local_ssh_host_ca_key_path }} --no-password --insecure
|
|
||||||
--principal {{ inventory_hostname }} --principal {{ ansible_host }}
|
|
||||||
args:
|
|
||||||
creates: "/tmp/{{ inventory_hostname }}-cert.pub"
|
|
||||||
# Примечание: Для работы этой задачи на вашем ПК должен быть настроен step-cli контекст.
|
|
||||||
# Если это сложно автоматизировать, этот блок можно пока пропустить.
|
|
||||||
|
|
||||||
# --- ЭТАП 4: НАСТРОЙКА SSHD_CONFIG ---
|
|
||||||
|
|
||||||
- name: Сбор имен всех разрешенных пользователей для AllowUsers
|
|
||||||
set_fact:
|
|
||||||
allow_users_list: "{{ project_users | map(attribute='name') | join(' ') }}"
|
|
||||||
|
|
||||||
- name: Конфигурация OpenSSH Daemon
|
|
||||||
blockinfile:
|
|
||||||
path: /etc/ssh/sshd_config
|
|
||||||
block: |
|
|
||||||
TrustedUserCAKeys /etc/ssh/ca.pub
|
|
||||||
AuthorizedPrincipalsFile /etc/ssh/auth_principals/%u
|
|
||||||
AllowUsers {{ allow_users_list }} hogweed1
|
|
||||||
PasswordAuthentication no
|
|
||||||
PubkeyAuthentication yes
|
|
||||||
marker: "# {mark} ANSIBLE MANAGED ZERO TRUST BLOCK #"
|
|
||||||
notify: Restart SSH
|
|
||||||
|
|
||||||
handlers:
|
|
||||||
- name: Restart SSH
|
|
||||||
service:
|
|
||||||
name: sshd
|
|
||||||
state: restarted
|
|
||||||
Reference in New Issue
Block a user