implementar la clave ssh de maestro a súbdito a través de pilares de sal

11

Tengo dos claves ssh que estoy tratando de implementar en uno de mis secuaces. Pero parece que no puedo lograr que se implemente. Se equivoca. Aquí están los 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

Aquí está mi init.slsestado:

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

Debo estar haciendo algo mal (obviamente), pero no estoy seguro de qué. ¿Alguna sugerencia?

seguro212
fuente
Me gustaría ayudar, pero no puedo responder con la información proporcionada. Parte de la razón es el formato yaml. Edite su pregunta, pero deje un enlace en blanco encima y debajo de cada bloque de código, luego sangre cada línea en el bloque de código por al menos 4 espacios. Segundo, ¿ya logró hacerlo sin pilares en la ecuación? Nunca he visto los datos de pilares configurados de la forma en que los tiene.
Dan Garthwaite
¿Encontró una respuesta a su pregunta?
Dan Garthwaite el
Sí, creo que lo hice
seguro212

Respuestas:

13

El sistema Salt Pillar no tiene un archivo init.sls. Tanto los estados como los pilares tienen un archivo top.sls. Los estados que son subdirectorios pueden tener un archivo init.sls.

Paso 1: Defina sus usuarios en /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]

Paso 2: agregue el nuevo pilar a /srv/pillar/top.sls

base:
  'testminion':
    - users

Paso 3: use jinja para asignar el pilar a los estados en /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

¡No olvides sincronizar los minions con los nuevos pilares!

salt targetminions saltutil.refresh_pillar
Dan Garthwaite
fuente
No pude hacer que este ejemplo funcionara en Salt 2014.7.1; parece dar un error: "La variable Jinja 'str objeto' no tiene atributo 'nombre'". He recurrido a hacer algo como esto en user / init.sls: {% for user, data in salt['pillar.get']('users', {}).iteritems() %}esto cambiará significativamente el archivo sls en todo momento; si se me ocurre un ejemplo de trabajo, lo publicaré.
Mike S
Seguimiento: si usted, querido viajero, está buscando utilizar este código, creo que tiene varios errores. Por ejemplo, los dos puntos después de "fred" y "barney" harán que la sal vomite, al igual que el "fin de" y el "fin de si" (no deberían tener espacios allí). Una vez más, sospecho que la inicial de construcción es defectuosa, pero no sé mucho sobre sal en este momento, así que no puedo estar seguro. Programador de advertencias. Para mí, voy a trabajar con el concepto iteritems ().
Mike S
Lo siento, Dan, sigo obteniendo testminion: no se pudieron compilar los datos: ---------- Representación de SLS 'base: usuarios' fallidos: la variable Jinja 'str objeto' no tiene atributo 'nombre' cuando ejecuto: salt testminion state.highstate test = True ... He copiado su texto textualmente, arriba. La única adición fue mi archivo /srv/salt/top.sls que es un simple 3-liner (base :, '*' :, y -users).
Mike S
Giraré un contenedor acoplable y lo resolveré, ¿a menos que llegue primero?
Dan Garthwaite
La "falla en la compilación de datos" fue causada por el sufijo del nombre de archivo '.sls' en /srv/pillar/top.sls. Entonces también me encontré con problemas. Tenga en cuenta que he reescrito gran parte de él. Tuve que abandonar user.sshpriv por ahora, se está haciendo tarde y sigo teniendo problemas con --- en el contenido del texto.
Dan Garthwaite
1

Probablemente debería tenerse en cuenta que, en relación con la pregunta original, hay otra solución simple si el source: salt://...formato no funciona file.managed, como sucedió salt-sshdebido al error https://github.com/saltstack/salt/issues/38458 que fue desde fijo - y eso es cambiar contents:con el pilar externo del árbol de archivos, que también está respaldado por archivos en el maestro.

El file_tree ext_pillardocumento está documentado en https://docs.saltstack.com/en/latest/ref/pillar/all/salt.pillar.file_tree.html#module-salt.pillar.file_tree hoy en día. Ha existido desde la versión 2015.5.0, por lo que es más nuevo que la pregunta y la respuesta original, sin embargo, es una solución que está razonablemente disponible hoy en día.

De hecho, también está en las preguntas frecuentes en https://docs.saltstack.com/en/latest/faq.html#is-it-possible-to-deploy-a-file-to-a-specific-minion-without -otros-minions-teniendo-acceso-a-él

Josip Rodin
fuente