# Ansible Home VM Project Scripts Этот файл описывает playbook-и внутри проекта `ansibleHostsHomeVM`. ## Структура проекта ```text ansible.cfg inventory.ini facts.yml add-ssh-key.yml bootstrap-new-client.yml generate-ssh-config.yml ``` ## ansible.cfg Локальный конфиг Ansible для этого проекта. ```ini [defaults] inventory = inventory.ini interpreter_python = auto_silent host_key_checking = True ``` Смысл: - `inventory = inventory.ini` — не нужно каждый раз писать `-i inventory.ini`. - `interpreter_python = auto_silent` — Ansible сам ищет Python на VM и не шумит предупреждениями. - `host_key_checking = True` — SSH host key checking включён. Это безопаснее: если fingerprint сервера изменился, Ansible не подключится молча. ## inventory.ini Список управляемых VM. Пример: ```ini [proxmox_vms] nginx ansible_host=192.168.8.170 ansible_user=vrubel docker-prod ansible_host=192.168.8.171 ansible_user=vrubel fedoraXfce ansible_host=192.168.8.172 ansible_user=vrubel hermes ansible_host=192.168.8.173 ansible_user=vrubel docker-test ansible_host=192.168.8.174 ansible_user=vrubel cicd ansible_host=192.168.8.175 ansible_user=vrubel monitoring ansible_host=192.168.8.176 ansible_user=vrubel ``` Группа `proxmox_vms` используется в командах: ```bash ansible proxmox_vms -m ping ansible-playbook facts.yml ``` ## facts.yml Диагностический playbook. Ничего не меняет на серверах. Он собирает facts и показывает: - имя хоста; - семейство ОС; - дистрибутив; - версию ОС; - пакетный менеджер; - путь к Python. Запуск: ```bash ansible-playbook facts.yml ``` Используется для проверки, какие машины Ubuntu/Debian, какие Fedora/RedHat, и какой пакетный менеджер Ansible видит. ## add-ssh-key.yml Playbook для добавления публичного SSH-ключа в `authorized_keys` пользователя `vrubel` на всех VM. По умолчанию берёт ключ текущего пользователя: ```text ~/.ssh/id_ed25519.pub ``` Запуск, если доступ по ключу уже есть: ```bash ansible-playbook add-ssh-key.yml ``` Если надо добавить не текущий ключ, а другой публичный ключ из файла: ```bash ansible-playbook add-ssh-key.yml -e "key_file=$HOME/Downloads/new-client.pub" ``` Или, например: ```bash ansible-playbook add-ssh-key.yml -e "key_file=$HOME/infra/ansible/keys/laptop.pub" ``` Важно: файл должен быть именно публичным ключом, то есть `.pub`. Приватный ключ `id_ed25519` в репозиторий не добавлять и никому не передавать. Этот playbook полезен, когда управляющий комп уже имеет SSH-доступ к VM и нужно добавить новый ключ на все машины. ## bootstrap-new-client.yml Playbook для первичной настройки нового клиента. Он делает две вещи: 1. На локальном компьютере добавляет fingerprints VM в `~/.ssh/known_hosts`. 2. По SSH-паролю подключается к VM и добавляет публичный ключ текущего клиента в `authorized_keys`. Запуск на новом компьютере: ```bash ansible-playbook bootstrap-new-client.yml --ask-pass ``` Ansible спросит SSH-пароль пользователя `vrubel`. После успешного выполнения нужно проверить доступ без пароля: ```bash ansible proxmox_vms -m ping ``` Если все VM отвечают `pong`, новый клиент готов. Этот playbook заменяет ручной `ssh-copy-id` по всем VM. ## generate-ssh-config.yml Playbook для генерации локального `~/.ssh/config` из `inventory.ini`. Он добавляет блок вида: ```sshconfig # BEGIN ANSIBLE MANAGED HOME VM HOSTS Host nginxVM HostName 192.168.8.170 User vrubel IdentityFile ~/.ssh/id_ed25519 Host docker-prodVM HostName 192.168.8.171 User vrubel IdentityFile ~/.ssh/id_ed25519 # END ANSIBLE MANAGED HOME VM HOSTS ``` Сначала безопасная проверка: ```bash ansible-playbook generate-ssh-config.yml --check --diff ``` Если diff выглядит нормально, применить: ```bash ansible-playbook generate-ssh-config.yml ``` После этого можно заходить так: ```bash ssh nginxVM ssh docker-prodVM ssh hermesVM ``` Playbook управляет только блоком между маркерами `ANSIBLE MANAGED HOME VM HOSTS`. Остальные ручные записи в `~/.ssh/config` не трогает. ## Типовой сценарий для нового компьютера ```bash sudo pacman -S ansible sshpass git clone git@github.com:vrubelroman/ansibleHostsHomeVM.git cd ansibleHostsHomeVM ansible-playbook bootstrap-new-client.yml --ask-pass ansible proxmox_vms -m ping ansible-playbook generate-ssh-config.yml --check --diff ansible-playbook generate-ssh-config.yml ```