déployer la clé ssh du maître au serviteur via les piliers de sel

11

J'ai deux clés ssh que j'essaie de déployer sur l'un de mes serviteurs. Mais je n'arrive pas à le faire se déployer. Il se trompe. Voici les init.slspiliers:

/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

Voici mon init.slsétat:

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

Je dois faire quelque chose de mal (évidemment), mais je ne sais pas quoi. Aucune suggestion?

secure212
la source
Je voudrais aider, mais je ne peux pas répondre avec les informations fournies. Une partie de la raison est le formatage yaml. Modifiez votre question mais laissez un lien vide au-dessus et en dessous de chaque bloc de code, puis indentez chaque ligne du bloc de code d'au moins 4 espaces. Deuxièmement, avez-vous déjà réussi à le faire sans piliers de l'équation? Je n'ai jamais vu les données des piliers définies comme vous les avez.
Dan Garthwaite
Avez-vous trouvé une réponse à votre question?
Dan Garthwaite
Oui, je crois que je l'ai fait
secure212

Réponses:

13

Le système Salt Pillar n'a pas de fichier init.sls. Les états et les piliers ont un fichier top.sls. Les états qui sont des sous-répertoires peuvent avoir un fichier init.sls.

Étape 1: définissez vos utilisateurs dans /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]

Étape 2: ajoutez le nouveau pilier à /srv/pillar/top.sls

base:
  'testminion':
    - users

Étape 3: utilisez jinja pour mapper le pilier aux états dans /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'oubliez pas de synchroniser les sbires avec les nouveaux piliers!

salt targetminions saltutil.refresh_pillar
Dan Garthwaite
la source
Je n'ai pas pu obtenir cet exemple pour travailler sur Salt 2014.7.1; il semble donner une erreur: "La variable Jinja 'objet str' n'a pas d'attribut 'nom'". J'ai eu recours à quelque chose comme ça dans user / init.sls: {% for user, data in salt['pillar.get']('users', {}).iteritems() %}cela va considérablement changer le fichier sls tout au long; si je trouve un exemple de travail, je le posterai.
Mike S
Suivi: Si vous, cher voyageur, cherchez à utiliser ce code, je crois qu'il contient un certain nombre d'erreurs. Par exemple, les deux-points après "fred" et "barney" entraîneront le sel à barf, de même que "end for" et "end if" (ils ne devraient pas avoir d'espace à l'intérieur). Encore une fois, je soupçonne que l'initiale de la construction est défectueuse, mais je ne sais pas grand-chose sur le sel pour le moment, donc je ne peux pas en être sûr. Programmeur de mise en garde. Pour ma part, je vais travailler avec le concept iteritems ().
Mike S
Désolé, Dan, je reçois toujours testminion: Les données n'ont pas pu être compilées: ---------- Rendu de la base de SLS: les utilisateurs ont échoué: la variable Jinja 'objet str' n'a pas d'attribut 'nom' lorsque je lance: salt testminion state.highstate test = True .... J'ai copié votre texte textuellement, ci-dessus. Le seul ajout était mon fichier /srv/salt/top.sls qui est un simple 3-liner (base :, '*' :, et -users).
Mike S
Je vais faire tourner un conteneur docker et le trier, sauf si vous y arrivez en premier?
Dan Garthwaite
Le «échec de compilation des données» a été provoqué par le suffixe du nom de fichier «.sls» dans /srv/pillar/top.sls. J'ai aussi rencontré des problèmes. Veuillez noter que j'en ai réécrit une grande partie. J'ai dû abandonner user.sshpriv pour l'instant, il se fait tard et je continue d'avoir des problèmes avec --- dans le contenu du texte.
Dan Garthwaite
1

Il convient probablement de noter que par rapport à la question d'origine, il existe une autre solution simple si le source: salt://...format ne fonctionne pas file.managed- comme cela s'est toujours produit avec le salt-sshbug https://github.com/saltstack/salt/issues/38458 qui était depuis fixe - et c'est de basculer vers contents:avec le pilier externe d'arborescence de fichiers, qui est également soutenu par des fichiers sur le maître.

Le file_tree ext_pillardocument est documenté sur https://docs.saltstack.com/en/latest/ref/pillar/all/salt.pillar.file_tree.html#module-salt.pillar.file_tree de nos jours. Il existe depuis la version 2015.5.0, il est donc plus récent que la question et la réponse d'origine, mais c'est une solution qui est raisonnablement bien disponible aujourd'hui.

En effet, il figure également dans la FAQ sur https://docs.saltstack.com/en/latest/faq.html#is-it-possible-to-deploy-a-file-to-a-specific-minion-without -autres-sbires-y-accédant

Josip Rodin
la source