distribuire la chiave ssh dal maestro al servitore tramite colonne di sale


11

Ho due chiavi ssh che sto cercando di distribuire a uno dei miei seguaci. Ma non riesco a farlo distribuire. Errori. Ecco i init.slspilastri in:

/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

Ecco il mio init.slsstato:

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

Devo fare qualcosa di sbagliato (ovviamente), ma non sono sicuro di cosa. Eventuali suggerimenti?


Vorrei aiutare, ma non posso rispondere con le informazioni fornite. Parte del motivo è la formattazione yaml. Modifica la tua domanda ma lascia un collegamento vuoto sopra e sotto ogni blocco di codice, quindi rientra ogni riga nel blocco di codice di almeno 4 spazi. Secondo, sei già riuscito a farlo senza pilastri nell'equazione? Non ho mai visto impostare i dati dei pilastri nel modo in cui li hai.
Dan Garthwaite,

Hai trovato una risposta alla tua domanda?
Dan Garthwaite,

Sì, credo di averlo fatto
secure212

Risposte:


13

Il sistema Salt Pillar non ha un file init.sls. Sia gli stati che i pilastri hanno un file top.sls. Gli stati che sono sottodirectory possono avere un file init.sls.

Step 1: Definisci i tuoi utenti in /srv/pillar/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

Passaggio 2: aggiungere il nuovo pilastro in /srv/pillar/top.sls

base:
  'testminion':
    - users

Passaggio 3: utilizzare jinja per mappare il pilastro agli stati in /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

Non dimenticare di sincronizzare i seguaci con i nuovi pilastri!

salt targetminions saltutil.refresh_pillar

Non sono riuscito a far funzionare questo esempio su Salt 2014.7.1; sembra dare un errore: "La variabile Jinja 'str object' non ha attributo 'nome'". Ho fatto ricorso a qualcosa di simile nell'utente / init.sls: {% for user, data in salt['pillar.get']('users', {}).iteritems() %}questo cambierà significativamente il file sls; se trovo un esempio funzionante, lo posterò.
Mike S,

Seguito: se tu, caro viaggiatore, stai cercando di utilizzare questo codice, credo che contenga un certo numero di errori. Ad esempio, i due punti dopo "fred" e "barney" causeranno il sale, così come "end for" e "end if" (non dovrebbero avere spazi lì dentro). Ancora una volta ho il sospetto che l'iniziale per la costruzione sia difettosa, ma non so molto sul sale in questo momento, quindi non posso esserne sicuro. Programmatore Caveat. Per quanto mi riguarda, lavorerò con il concetto iteritems ().
Mike S,

Mi dispiace, Dan, ricevo ancora testminion: la compilazione dei dati non è riuscita: ---------- Rendering 'SLS: base: utenti' falliti: la variabile Jinja 'str object' non ha attributo 'nome' quando eseguo: salt testminion state.highstate test = True .... Ho copiato il tuo testo alla lettera, sopra. L'unica aggiunta era il mio file /srv/salt/top.sls che è un semplice 3-liner (base :, '*' :, e -users).
Mike S,

Farò girare un container docker e lo sistemerò, a meno che tu non ci arrivi prima?
Dan Garthwaite,

"La compilazione dei dati non è riuscita" è stata causata dal suffisso del nome file ".sls" in /srv/pillar/top.sls. Poi ho anche incontrato problemi. Nota, ne ho riscritto gran parte. Ho dovuto abbandonare user.sshpriv per ora, è solo tardi e continuo a mettermi nei guai con --- nel contenuto del testo.
Dan Garthwaite,

1

Dovrebbe probabilmente essere notato che in relazione alla domanda originale, c'è un'altra soluzione semplice se il source: salt://...formato non funziona file.managed- come è successo con il salt-sshbug https://github.com/saltstack/salt/issues/38458 che era dal momento che risolto - e che è quello di passare al contents:pilastro esterno dell'albero dei file, che è anche supportato da file sul master.

Il file_tree ext_pillardocumento è documentato su https://docs.saltstack.com/en/latest/ref/pillar/all/salt.pillar.file_tree.html#module-salt.pillar.file_tree al giorno d'oggi. Esiste dalla versione 2015.5.0, quindi è più recente della domanda e risposta originale, eppure è una soluzione che è ragionevolmente ben disponibile oggi.

Infatti, è anche nelle FAQ su https://docs.saltstack.com/en/latest/faq.html#is-it-possible-to-deploy-a-file-to-a-specific-minion-without -Altri-servi-avere-Access-to-it

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.