Files
ansible-repo/playbooks/deploy_ssh_certs.yml
hogweed1 eaec4d7b87
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 1s
ssh-certs users.
2026-05-21 02:10:57 +10:00

94 lines
3.9 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

- 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