implantar a chave ssh do mestre para o minion através de pilares de sal

11

Eu tenho duas chaves ssh que estou tentando implantar em um dos meus subordinados. Mas não consigo implementá-lo. Erro. Aqui estão os init.slspilares:

/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

Aqui está o meu init.slsestado:

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

Eu devo estar fazendo algo errado (obviamente), mas não tenho certeza do quê. Alguma sugestão?

secure212
fonte
Gostaria de ajudar, mas não posso responder com as informações fornecidas. Parte do motivo é a formatação yaml. Edite sua pergunta, mas deixe um link em branco acima e abaixo de cada bloco de código e, em seguida, indente cada linha no bloco de código em pelo menos 4 espaços. Segundo, você já conseguiu fazer isso sem pilares na equação? Nunca vi dados de pilares configurados da maneira que você os possui.
Dan Garthwaite 23/10
Você encontrou uma resposta para sua pergunta?
Dan Garthwaite
Sim, acredito que sim
secure212

Respostas:

13

O sistema Salt Pillar não possui um arquivo init.sls. Os estados e os pilares têm um arquivo top.sls. Estados subdiretórios podem ter um arquivo init.sls.

Etapa 1: defina seus usuários em /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]

Etapa 2: adicione o novo pilar a /srv/pillar/top.sls

base:
  'testminion':
    - users

Etapa 3: use o jinja para mapear o pilar para os estados em /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

Não se esqueça de sincronizar os lacaios com os novos pilares!

salt targetminions saltutil.refresh_pillar
Dan Garthwaite
fonte
Não consegui que este exemplo funcionasse no Salt 2014.7.1; parece dar um erro: "A variável Jinja 'objeto de str' não tem atributo 'nome'". Eu tentei fazer algo assim no user / init.sls: {% for user, data in salt['pillar.get']('users', {}).iteritems() %}Isso mudará significativamente o arquivo sls; se eu apresentar um exemplo prático, eu o publicarei.
Mike S
Acompanhamento: Se você, caro viajante, está procurando utilizar esse código, acredito que ele tenha vários erros. Por exemplo, os dois pontos depois de "fred" e "barney" farão com que o sal vomite, assim como o "fim de" e "fim de se" (eles não devem ter espaços). Novamente, suspeito que a inicial da construção esteja com defeito, mas não sei muito sobre sal no momento, então não tenho certeza. Programador de advertência. Por mim, vou trabalhar com o conceito iteritems ().
Mike S
Desculpe, Dan, ainda recebo testminion: Falha na compilação dos dados: ---------- Falha na renderização do SLS ': usuários': variável Jinja 'str object' não tem atributo 'name' quando executo: salt testminion state.highstate test = True .... Eu copiei seu texto literalmente, acima. A única adição foi o meu arquivo /srv/salt/top.sls, que é um simples liner de 3 linhas (base :, '*' :, e -users).
Mike S
Vou girar um contêiner e separá-lo, a menos que você chegue primeiro?
21715 Dan Garthwaite
O "Falha na compilação dos dados" foi causado pelo sufixo do nome do arquivo '.sls' em /srv/pillar/top.sls. Do que eu também tive problemas. Por favor, note que eu reescrevi muito disso. Eu tive que largar user.sshpriv por enquanto, está ficando tarde e continuo tendo problemas com --- no conteúdo do texto.
precisa saber é o seguinte
1

Ele provavelmente deve-se notar que, em relação à pergunta inicial, não há outra solução simples se source: salt://...formato não funciona com file.managed- como ainda aconteceu com salt-sshpor causa do bug https://github.com/saltstack/salt/issues/38458 que era desde que corrigido - e isso é mudar para contents:o pilar externo da árvore de arquivos, que também é apoiado por arquivos no mestre.

Ele file_tree ext_pillarestá documentado em https://docs.saltstack.com/en/latest/ref/pillar/all/salt.pillar.file_tree.html#module-salt.pillar.file_tree atualmente. Existe desde a versão 2015.5.0, por isso é mais recente que a pergunta e resposta originais, mas é uma solução que está razoavelmente bem disponível hoje.

De fato, também está nas Perguntas frequentes em https://docs.saltstack.com/en/latest/faq.html#is-it-possible-to-deploy-a-file-to-a-specific-minion-without -outros-minions-tendo-acesso-a

Josip Rodin
fonte