Рейтинг:2

Как добавить ключи ssh через Ansible, если установлен AuthorizedKeysFile?

флаг br

Как я могу заставить Ansible заполнить правильный файл, когда мой /etc/ssh/sshd_config имеет АвторизованныйКейсФайл установлен в /etc/ssh/authorized_keys/%u? Ansible, кажется, игнорирует настройку и помещает ключи в $HOME/.ssh/authorized_keys

сборник пьес:

---
- хозяева: все
  вары:
  vars_files:
    - ../group_vars/ssh_root_authorized_keys.yml
  сбор_фактов: ложь

  задачи:
    - имя: Настройка нескольких авторизованных ключей
      авторизованный_ключ:
        пользователь: корень
        состояние: присутствует
        ключ: '{{ item.key }}'
      with_items: "{{ root_auth_keys }}"

ssh_root_authorized_keys.yml

root_auth_keys:
  - имя: резервная копия@хост
    key : "{{ lookup('file', '../group_vars/pubkeys/[email protected]') }}"

  - имя: nagios@host
    key : "{{ lookup('file', '../group_vars/pubkeys/[email protected]') }}"
Рейтинг:1
флаг in

От документация:

путь: Альтернативный путь к файлу author_keys

  задачи:
    - имя: Настройка нескольких авторизованных ключей
      авторизованный_ключ:
        пользователь: корень
        состояние: присутствует
        ключ: '{{ item.key }}'
        путь: '/etc/ssh/authorized_keys/root'
      with_items: "{{ root_auth_keys }}"
Nstevens avatar
флаг br
Спасибо. Я надеялся, что Ansible «осведомлен о пути», но думаю, что нет. Я полагаю, что здесь может помочь `stat:`, так как у меня есть некоторые хосты, на которых не установлен `AuthorizedKeysFile`. Есть ли простой способ определить, отличается ли этот элемент конфигурации sshd от значения по умолчанию? Я думаю о «shell:» или «cmd:» с «grep», но, возможно, нет.
Рейтинг:0
флаг br

Есть несколько шагов, чтобы подготовить эту функциональность. Сначала получите значение параметра. Может быть больше вариантов, например. по умолчанию

оболочка> sudo sshd -T | grep авторизованный файл ключей
файл авторизованных ключей .ssh/authorized_keys .ssh/authorized_keys2

Например, получить первый

    - оболочка: sshd -T | grep авторизованный файл ключей
      регистрация: результат
      стать истинным
    - set_fact:
        AuthorizedKeysFile: "{{ (result.stdout|split)[1] }}"

дает

  AuthorizedKeysFile: .ssh/authorized_keys

Параметр AuthorizedKeysFile может содержать %u и %час. Видеть Расположение файла авторизованных ключей

%h будет заменен домашним каталогом аутентифицируемого пользователя, а %u — именем входа пользователя.

Подготовьте базу данных домашних каталогов

    - получить:
        база данных: пароль

По умолчанию модуль получить хранит базу данных пароль в словаре getent_passwd. Дом - это 4-й атрибут, например.

    - отладка:
        переменная: getent_passwd['root'][4]

дает

  getent_passwd['root'][4]: /root

Теперь, учитывая данные

    авторизационные_ключи:
      корень: [ключ1, ключ2, ключ3]

вы можете проверить работоспособность

    - оболочка: sshd -T | grep авторизованный файл ключей
      регистрация: результат
      стать истинным
    - set_fact:
        AuthorizedKeysFile: "{{ (result.stdout|split)[1] }}"
    - получить:
        база данных: пароль
    - отладка:
        сообщение: |
          путь: {{_path}}
          ключи: {{ item.value }}
      цикл: "{{auth_keys|dict2items}}"
      вары:
        _user: "{{ item.key }}"
        _home: "{{ getent_passwd[item.key][4] }}"
        _akf: "{{ AuthorizedKeysFile|regex_replace('%u', _user)|
                                     regex_replace('%h', _home) }}"
        _path: "{{ (_akf.0 == '/')|тройной (_akf, [_home, _akf]|join ('/')) }}"

дает

  сообщение: |-
    путь: /root/.ssh/authorized_keys
    ключи: ['ключ1', 'ключ2', 'ключ3']

Если изменить параметр

оболочка> sudo sshd -T | grep авторизованный файл ключей
файл авторизованных ключей /etc/ssh/authorized_keys/%u

игра получит правильное расположение файла авторизованных ключей

  сообщение: |-
    путь: /etc/ssh/authorized_keys/root
    ключи: ['ключ1', 'ключ2', 'ключ3']

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.