Print this page

Управление SSH-ключами с помощью Ansible

24 September 2025

При работе с Ansible часто возникает задача: настроить доступ к удалённым серверам по SSH-ключам, чтобы отказаться от ввода пароля при каждом подключении. Для этого удобно использовать роль ssh_authorized_key, которая автоматически добавит нужный публичный ключ в authorized_keys на целевых серверах.


Структура роли

Простейшая роль для заливки ключа в root выглядит так:

roles/ssh_authorized_key/defaults/main.yml

---
ssh_key: ~/.ssh/ansible.pub

roles/ssh_authorized_key/tasks/main.yml

---
- name: Set authorized key taken from file
  authorized_key:
    user: <username> #вот тут ОБЫЧНЫЙ пользак с правами sudo
    state: present
    key: "{{ lookup('file', ssh_key) }}"

Здесь мы используем модуль Ansible authorized_key, который добавляет публичный ключ в ~/.ssh/authorized_keys.


Inventory и переменные

Пример inventory-файла:

inventory

[groupname]
<alias> ansible_host=<IP>

Переменные для группы:

group_vars/groupname

---
ansible_connection: ssh
ansible_port: 22
ansible_user: <username>       #ОБЫЧНЫЙ пользак с правами sudo
# ansible_password: password   # пароль можно не хранить в файле
ansible_ssh_private_key_file: ~/.ssh/ansible

⚠️ Рекомендуется не хранить пароль в group_vars. Лучше вводить его при запуске через ключ -k.


Плейбук

rolebook.yml

---
- name: Rolebook
  hosts: <groupname>
  become: yes
  roles:
    - {role: ssh_authorized_key, when: ansible_system == 'Linux'}
  • become: yes — используется, чтобы Ansible мог переключиться на root и положить ключ в его authorized_keys.

  • Т.к. подключение идёт не от root, то дополнительно понадобится -K (ввод пароля для sudo).


Запуск

ansible-playbook rolebook.yml -kK
  • -k — попросит SSH-пароль для пользователя <username>.

  • -K — попросит sudo-пароль для <username>, чтобы выполнить become: root.

После того как ключ добавлен, при последующих запусках можно подключаться напрямую по ключу:

ansible-playbook rolebook.yml -K

Итог

  • Роль ssh_authorized_key автоматизирует настройку SSH-доступа.

  • Не стоит хранить пароль в group_vars, достаточно использовать -kK.

  • После первого запуска доступ к root по ключу обеспечен.

Таким образом, Ansible позволяет легко перевести инфраструктуру на работу через SSH-ключи и избавиться от постоянного ввода паролей.