known_hosts#

Модуль ansible.builtin.known_hosts управляет содержимым файла known_hosts. При подключении к управляемому узлу клиент SSH ищет запись о нем в этом файле на локальной машине в следующей последовательности:

  1. Если записи нет, клиент выводит сведения об отпечатке узла и запрос на его добавление в known_hosts.

  2. Если запись есть и отпечаток узла не изменился, клиент подключается к узлу.

  3. Если запись есть, но отпечаток узла изменился, клиент блокирует подключение как небезопасное.

Особенности работы#

Особенности работы модуля ansible.builtin.known_hosts:

  • Можно использовать несколько записей для одного узла, но клиент SSH будет использовать только одну запись для каждого типа ключа. Это может быть полезно при использовании модуля ansible.builtin.git для подключения через SSH.

  • При большом количестве ключей более эффективным решением будет использование модуля ansible.builtin.template.

Параметры#

Модуль принимает следующие параметры:

hash_host#

Хеширование названия узла в known_hosts.

Возможные значения:

  • false – не выполняется;

  • true – выполняется.

key#

Запись для добавления в known_hosts.

Важно

Этот параметр обязателен для заполнения при state=present и необязателен при state=absent, поскольку в последнем случае все записи об узле удаляются.

Формат представлен несколькими полями:

<hostname,[IP]>[:<port>] <pubkey>

Здесь:

  • <hostname> – название узла.

  • <IP> – IP-адрес узла.

    Может быть указан вместо названия или вместе с ним. Во втором случае значения разделяются запятыми.

  • <port> – порт для подключения, если отличается от значения по умолчанию.

  • <pubkey> – содержимое публичного ключа SSH, включая название алгоритма, но без комментария.

Пример

Пусть узел node.example.com с IP-адресом 192.168.122.11 использует публичный ключ SSH, созданный по алгоритму ED25519. В этом случае значение key имеет следующий вид:

key: node.example.com,192.168.122.11 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIrpKfM3px/WANxru6MZlC11Mj5BVknIAp1Tz1cRDnjf
name, host#

Обязательный параметр.

Название узла для добавления в known_hosts или удаления из него. Указанное значение будет автоматически приведено к нижнему регистру, чтобы утилита ssh-keygen смогла найти его.

Значение должно совпадать с названием или IP-адресом узла, указанным в параметре key. Если порт для подключения отличается от значения по умолчанию, он также должен быть указан.

path#

Путь к файлу known_hosts.

Если указанный файл не существует, при необходимости он будет создан. Однако, это не относится к каталогу, в котором модуль будет искать файл – если он не существует, задача завершится с ошибкой.

Значение по умолчанию: ~/.ssh/known_hosts.

state#

Желаемое состояние записи в known_hosts.

Возможные значения:

  • absent – отсутствует;

  • present – существует.

Значение по умолчанию: present.

Атрибуты#

Атрибуты определяют функции Ansible, которые может использовать модуль.

Атрибут

Описание

check_mode

Модуль работает в режиме проверки (check_mode) в полном объеме.

diff_mode

Модуль поддерживает режим сравнения (diff_mode) в полном объеме и возвращает подробную информацию о сделанных изменениях.

platform

Модуль поддерживает только POSIX-совместимые ОС.

Примеры#

Для изучения возможностей модуля ознакомьтесь с приведенными ниже примерами.

Добавление записи об узле#

Следующий пример демонстрирует добавление записи об узле:

---
- name: Add record to known_hosts
  ansible.builtin.known_hosts:
    name: node.example.com
    key: node.example.com ssh-rsa ASDerarFA13351FE51
    path: /etc/ssh/ssh_known_hosts
    state: present

Нестандартный порт для подключения#

Следующий пример демонстрирует добавление записи об узле, на котором для подключения по SSH используется порт 2233:

---
- name: Add node.example.com to known_hosts
  hosts: all

  tasks:
    - name: Add record to known_hosts
      ansible.builtin.known_hosts:
        name: "node.example.com:2233"
        key: "node.example.com:2233 ssh-rsa ASDerarFA13351FE51"
        path: "/home/{{ ansible_user }}/.ssh/known_hosts"