развернуть ключ ssh от мастера к миньону через соляные столбы

11

У меня есть два ключа ssh, которые я пытаюсь развернуть на одном из моих миньонов. Но я не могу заставить его развернуться. Это ошибки. Вот init.slsкартинка в столбах:

/xxx/yyy/zzz/id_rsa:
  file.managed:
    - source: salt://private/id_rsa

/xxx/yyy/zz/id_rsa.pub:
  file.managed:
    - source: salt://private/id_rsa.pub

Вот мое init.slsсостояние:

ssh:
  file.managed:
    - name: {{ pillar['private'] }}

Должно быть, я что-то делаю не так (очевидно), но я не уверен, что. Какие-либо предложения?

secure212
источник
Я бы хотел помочь, но не могу ответить предоставленной информацией. Часть причины - форматирование yaml. Отредактируйте свой вопрос, но оставьте пустую ссылку выше и ниже каждого кодового блока, затем сделайте отступ каждой строке в кодовом блоке как минимум на 4 пробела. Во-вторых, вам уже удалось сделать это без столпов в уравнении? Я никогда не видел, чтобы данные столпа были настроены так, как они есть у вас.
Дэн Гартвейт
Вы нашли ответ на свой вопрос?
Дэн Гартвейт
Да, я думаю, что сделал
secure212

Ответы:

13

Система Salt Pillar не имеет файла init.sls. И у состояний, и у столбов есть файл top.sls. Состояния, которые являются подкаталогами, могут иметь файл init.sls.

Шаг 1. Определите своих пользователей в /srv/pillar/users.sls

users:

  - name: fred
    fullname: Fred Flintstone
    email: fflintstone@slaterockandgravel.com
    uid: 4001
    gid: 4001
    shell: /bin/bash
    groups:
      - bowling
    shadow: $6$Sasdf/Ss$asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfsadfasdfsadfsadfsdf
    authkey: ssh-dss AAAAasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafa = fflinstone@slaterockandgravel.com
    sshpub: ssh-dss AAAAasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafa = fflinstone@slaterockandgravel.com

  - name: barney
    fullname: Barney Rubble
    email: brubbel@slaterockandgravel.com
    uid: 4002
    gid: 4002
    shell: /bin/bash
    groups:
      - bowling
    shadow: $6$Suiop/Ss$uiopuiopuiopuiopuiopuiopuiopuiopuiopuiopuiopsadfuiopsadfsadfsdf
    authkey: ssh-dss AAAAuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafa = fflinstone@slaterockandgravel.com
    sshpub: ssh-dss AAAAuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafa = fflinstone@slaterockandgravel.com

Шаг 2: Добавьте новый столб в /srv/pillar/top.sls

base:
  'testminion':
    - users

Шаг 3: Используйте jinja, чтобы отобразить столб к состояниям в /srv/salt/user/init.sls

{% for user in pillar['users'] %}
user_{{user.name}}:
  group.present:
    - name: {{user.name}}
    - gid: {{user.gid}}

  user.present:
    - name: {{user.name}}
    - fullname: {{user.fullname}}
    - password: {{user.shadow}}
    - shell: {{user.shell}}
    - uid: {{user.uid}}
    - gid: {{user.gid}}
    {% if user.groups %}
    - optional_groups:
      {% for group in user.groups %}
      - {{group}}
      {% endfor %}
    {% endif %}
    - require:
      - group: user_{{user.name}}

  file.directory:
    - name: /home/{{user.name}}
    - user: {{user.name}}
    - group: {{user.name}}
    - mode: 0751
    - makedirs: True

user_{{user.name}}_forward:
  file.append:
    - name: /home/{{user.name}}/.forward
    - text: {{user.email}}

user_{{user.name}}_sshdir:
  file.directory:
    - name: /home/{{user.name}}/.ssh
    - user: {{user.name}}
    - group: {{user.name}}
    - mode: 0700

{% if 'authkey' in user %}
user_{{user.name}}_authkeys:
  ssh_auth.present:
    - user: {{user.name}}
    - name: {{user.authkey}}
{% endif %}

{% if 'sshpriv' in user %}
user_{{user.name}}_sshpriv:
  file.managed:
    - name: /home/{{user.name}}/.ssh/id_rsa
    - user: {{user.name}}
    - group: {{user.name}}
    - mode: 0600
    - contents_pillar: {{user.sshpriv}}
{% endif %}

{% if 'sshpub' in user %}
user_{{user.name}}_sshpub:
  file.managed:
    - name: /home/{{user.name}}/.ssh/id_rsa.pub
    - user: {{user.name}}
    - group: {{user.name}}
    - mode: 0600
    - contents_pillar: {{user.sshpub}}
{% endif %}
{% endfor %} # user in users
# vim: ft=yaml tabstop=2 sts=2 sw=2 et ai si

Не забудьте синхронизировать миньонов с новыми колоннами!

salt targetminions saltutil.refresh_pillar
Дэн Гартвейт
источник
Мне не удалось заставить этот пример работать на Salt 2014.7.1; похоже, что выдает ошибку: «Переменная Jinja 'str object' не имеет атрибута 'name'". Я прибег к тому, чтобы сделать что-то подобное в user / init.sls: {% for user, data in salt['pillar.get']('users', {}).iteritems() %}это значительно изменит файл sls; если я придумаю рабочий пример, я опубликую его.
Майк С
Продолжение: если вы, дорогой путешественник, хотите использовать этот код, я считаю, что в нем есть ряд ошибок. Например, двоеточия после «fred» и «barney» приведут к тому, что соль прекратится, как и «end for» и «end if» (там не должно быть пробелов). Опять же, я подозреваю, что первоначальный для конструкции неисправен, но я не знаю много о соли в настоящее время, поэтому я не могу быть уверен. Будьте программистом. Для себя я собираюсь работать с концепцией iteritems ().
Майк С.
Извините, Дэн, я все еще получаю testminion: данные не удалось скомпилировать: ---------- Рендеринг SLS 'base: users' fail: переменная Jinja 'str object' не имеет атрибута 'name' при запуске: salt testminion state.highstate test = True .... Я скопировал текст выше, выше. Единственным дополнением был мой файл /srv/salt/top.sls, представляющий собой простой 3-строчный файл (base :, '*': и -users).
Майк С
Я раскручиваю контейнер докера и разбираюсь с ним, если вы сначала не доберетесь до него?
Дэн Гартвейт
«Не удалось скомпилировать данные» было вызвано суффиксом имени файла .sls в /srv/pillar/top.sls. Чем я тоже столкнулся с проблемами. Пожалуйста, обратите внимание, я переписал большую часть этого. Мне пришлось отказаться от user.sshpriv, сейчас уже поздно, и у меня постоянно возникают проблемы с… в текстовом содержимом.
Дэн Гартвейт
1

Вероятно, следует отметить, что в отношении исходного вопроса, есть другое простое решение, если source: salt://...формат не работает с file.managed- как это все-таки произошло salt-sshиз-за ошибки https://github.com/saltstack/salt/issues/38458, которая была после исправления - и это переключается на contents:внешний столбец файлового дерева, который также поддерживается файлами на ведущем устройстве.

В file_tree ext_pillarнастоящее время документально подтверждено на странице https://docs.saltstack.com/en/latest/ref/pillar/all/salt.pillar.file_tree.html#module-salt.pillar.file_tree . Он существует с версии 2015.5.0, поэтому он новее, чем первоначальный вопрос и ответ, но это решение, которое достаточно доступно сегодня.

Действительно, это также в FAQ по адресу https://docs.saltstack.com/en/latest/faq.html#is-it-possible-to-deploy-a-file-to-a-specific-minion-without -другие-миньоны-имея доступ к его

Иосип Роден
источник