rozmieść klucz ssh od mistrza do stwora za pomocą filarów soli

11

Mam dwa klucze ssh, które próbuję wdrożyć w jednym z moich stworów. Ale nie mogę tego zmusić do wdrożenia. Występuje błąd. Oto init.slsfilary:

/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

Oto mój init.slsstan:

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

Oczywiście robię coś złego (oczywiście), ale nie jestem pewien co. Jakieś sugestie?

bezpieczne212
źródło
Chciałbym pomóc, ale nie mogę odpowiedzieć z podanymi informacjami. Częściowym powodem jest formatowanie yaml. Edytuj swoje pytanie, ale zostaw puste łącze nad i pod każdym kodem, a następnie wstaw wcięcie w każdym wierszu kodu o co najmniej 4 spacje. Po drugie, czy udało ci się już to zrobić bez filarów w równaniu? Nigdy nie widziałem danych filarowych skonfigurowanych w taki sposób, w jaki masz.
Dan Garthwaite
Czy znalazłeś odpowiedź na swoje pytanie?
Dan Garthwaite
Tak, wydaje mi się, że tak
Secure212

Odpowiedzi:

13

System Salt Pillar nie ma pliku init.sls. Zarówno stany, jak i filary mają plik top.sls. Stany będące podkatalogami mogą mieć plik init.sls.

Krok 1: Zdefiniuj użytkowników w /srv/pillar/users.sls

users:

  - name: fred
    fullname: Fred Flintstone
    email: [email protected]
    uid: 4001
    gid: 4001
    shell: /bin/bash
    groups:
      - bowling
    shadow: $6$Sasdf/Ss$asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfsadfasdfsadfsadfsdf
    authkey: ssh-dss AAAAasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafa = [email protected]
    sshpub: ssh-dss AAAAasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafa = [email protected]

  - name: barney
    fullname: Barney Rubble
    email: [email protected]
    uid: 4002
    gid: 4002
    shell: /bin/bash
    groups:
      - bowling
    shadow: $6$Suiop/Ss$uiopuiopuiopuiopuiopuiopuiopuiopuiopuiopuiopsadfuiopsadfsadfsdf
    authkey: ssh-dss AAAAuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafa = [email protected]
    sshpub: ssh-dss AAAAuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafa = [email protected]

Krok 2: Dodaj nowy filar do /srv/pillar/top.sls

base:
  'testminion':
    - users

Krok 3: Użyj jinja do mapowania filaru na stany w /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

Nie zapomnij zsynchronizować stworów z nowymi filarami!

salt targetminions saltutil.refresh_pillar
Dan Garthwaite
źródło
Nie udało mi się nakłonić tego przykładu do pracy w Salt 2014.7.1; wydaje się dawać błąd: „Obiekt str zmiennej Jinja nie ma atrybutu„ nazwa ””. Uciekłem się do zrobienia czegoś takiego w user / init.sls: {% for user, data in salt['pillar.get']('users', {}).iteritems() %}To znacznie zmieni plik SLS ; jeśli wymyślę działający przykład, opublikuję go.
Mike S
Dalsze działania: jeśli, drogi podróżniku, chcesz wykorzystać ten kod, uważam, że zawiera on szereg błędów. Na przykład dwukropki po słowach „fred” i „barney” spowodują, że sól się wydostanie, podobnie jak „koniec dla” i „koniec, jeśli” (nie powinny mieć tam spacji). Znowu podejrzewam, że początkowy konstrukt jest wadliwy, ale w tej chwili niewiele wiem o soli, więc nie jestem pewien. Zastrzeżony programista. Dla siebie zamierzam pracować z koncepcją iteritems ().
Mike S
Przepraszam, Dan, nadal otrzymuję testminion: Kompilacja danych nie powiodła się: ---------- Renderowanie SLS „baza: użytkownicy” nie powiodło się: zmienna „str” obiektu Jinja nie ma atrybutu „nazwa”, gdy uruchamiam: sól testminion state.highstate test = True .... Skopiowałem twój tekst dosłownie powyżej. Jedynym dodatkiem był mój plik /srv/salt/top.sls, który jest prostym 3-liniowym plikiem (baza :, „*” :, i -users).
Mike S
Rozkręcę pojemnik dokerów i uporządkuję go, chyba że dotrzesz do niego pierwszy?
Dan Garthwaite
„Kompilacja danych nie powiodła się” była spowodowana przyrostkiem nazwy pliku „.sls” w katalogu /srv/pillar/top.sls. Niż też miałem problemy. Uwaga: napisałem wiele z nich. Na razie musiałem upuścić user.sshpriv, robi się już późno i ciągle mam problemy z --- w treści tekstu.
Dan Garthwaite,
1

Należy prawdopodobnie zauważyć, że w odniesieniu do pierwotnego pytania istnieje inne proste rozwiązanie, jeśli source: salt://...format nie działa file.managed- tak jak to się stało z salt-sshpowodu błędu https://github.com/saltstack/salt/issues/38458, który był od czasu naprawienia - i to do przełączania na contents:zewnętrzny filar drzewa plików, który jest również wspierany przez pliki w systemie głównym.

file_tree ext_pillarJest udokumentowana w https://docs.saltstack.com/en/latest/ref/pillar/all/salt.pillar.file_tree.html#module-salt.pillar.file_tree dzisiejszych czasach. Istnieje od wersji 2015.5.0, więc jest nowszy niż oryginalne pytanie i odpowiedź, ale jest to rozwiązanie, które jest dziś dość dobrze dostępne.

Rzeczywiście, znajduje się również w FAQ na https://docs.saltstack.com/en/latest/faq.html#is-it-possible-to-deploy-a-file-to-a-specific-minion-without -inne-stwory-mające-dostęp-do-tego

Josip Rodin
źródło