розгорнути 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'] }}

Я маю щось робити неправильно (очевидно), але я не впевнений, що. Будь-які пропозиції?


Я хотів би допомогти, але не можу відповісти за наданою інформацією. Частина причини - форматування ямлу. Відредагуйте своє запитання, але залиште порожнє посилання над і під кожним блоком коду, а потім відступіть кожен рядок у блоці коду як мінімум на 4 пробіли. По-друге, вам уже вдалося це зробити без стовпів у рівнянні? Я ніколи не бачив, щоб дані стовпа були налаштовані так, як у вас є.
Dan Garthwaite

Ви знайшли відповідь на своє запитання?
Dan Garthwaite

Так, я вважаю, що так і зробив
secure212

Відповіді:


13

Система соляного стовпа не має файлу init.sls. І держави, і стовпи мають файл top.sls. Держави, які є підкаталогами, можуть мати файл init.sls.

Крок 1. Визначте своїх користувачів у /srv/Weather/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/Weather/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 "". Я вдався зробити щось подібне в користувачеві / init.sls: {% for user, data in salt['pillar.get']('users', {}).iteritems() %}Це істотно змінить файл sls протягом усієї; якщо я придумаю робочий приклад, опублікую його.
Майк S

Подальше: Якщо ви, шановний мандрівник, хочете використовувати цей код, я вважаю, що в ньому є ряд помилок. Наприклад, колони після "fred" і "barney" спричинить солі до барфу, як і "end for" і "end if" (у них не повинно бути пробілів). Знову я підозрюю, що початкова конструкція є несправною, але я не знаю багато про сіль на даний момент, тому я не можу бути впевнений. Програміст Caveat. Для себе я збираюся працювати з концепцією iteritems ().
Майк S

Вибачте, Ден, я все ще отримую testminion: Дані не вдалося зібрати: ---------- Візуалізація бази SLS: користувачі 'не вдалося: змінна Jinja' str object 'не має атрибута' name 'при запуску: соль testminion state.highstate test = Істинно .... Я скопіював ваш текст дослівно, вище. Єдиним доповненням був мій /srv/salt/top.sls файл, який представляє собою простий 3-лайнер (base :, '*' :, і -users).
Майк S

Я закручую контейнер для докера і розбираю його, якщо ви не дістанетесь до нього першим?
Dan Garthwaite

"Дані не вдалося зібрати" було викликано суфіксом імені файлу ".sls" у /srv/pili/top.sls. Тож я також зіткнувся з проблемами. Зверніть увагу, я багато чого переписав. Мені довелося покинути user.sshpriv, він просто запізнюється, і я постійно переживаю проблеми з --- у текстовому вмісті.
Dan Garthwaite

1

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

Цей file_tree ext_pillarдокумент задокументований на https://docs.saltstack.com/en/latest/ref/pil/all/salt.pili.file_tree.html#module-salt.pili.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 -інші міньйони, що мають доступ до нього

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.