Setzen Sie den SSH-Schlüssel über Salzsäulen vom Meister zum Diener ein

11

Ich habe zwei SSH-Schlüssel, die ich für einen meiner Schergen bereitstellen möchte. Aber ich kann es scheinbar nicht zum Einsatz bringen. Es ist ein Fehler. Hier sind die init.slsSäulen:

/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

Hier ist mein init.slsZustand:

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

Ich muss (offensichtlich) etwas falsch machen, aber ich bin mir nicht sicher, was. Irgendwelche Vorschläge?

Secure212
quelle
Ich würde gerne helfen, kann aber nicht mit den bereitgestellten Informationen antworten. Ein Grund dafür ist die Yaml-Formatierung. Bearbeiten Sie Ihre Frage, lassen Sie jedoch einen leeren Link über und unter jedem Codeblock und rücken Sie dann jede Zeile im Codeblock um mindestens 4 Leerzeichen ein. Zweitens, ist es Ihnen bereits gelungen, dies ohne Säulen in der Gleichung zu tun? Ich habe noch nie gesehen, dass Säulendaten so eingerichtet wurden, wie Sie sie haben.
Dan Garthwaite
Haben Sie eine Antwort auf Ihre Frage gefunden?
Dan Garthwaite
Ja, ich glaube ich habe
Secure212

Antworten:

13

Das Salt Pillar-System verfügt nicht über eine init.sls-Datei. Sowohl Staaten als auch Säulen haben eine top.sls-Datei. Zustände, die Unterverzeichnisse sind, haben möglicherweise eine init.sls-Datei.

Schritt 1: Definieren Sie Ihre Benutzer in /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]

Schritt 2: Fügen Sie die neue Säule zu /srv/pillar/top.sls hinzu

base:
  'testminion':
    - users

Schritt 3: Verwenden Sie jinja, um die Säule den Zuständen in /srv/salt/user/init.sls zuzuordnen

{% 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

Vergiss nicht, die Schergen mit den neuen Säulen zu synchronisieren!

salt targetminions saltutil.refresh_pillar
Dan Garthwaite
quelle
Ich konnte dieses Beispiel nicht für Salt 2014.7.1 verwenden. Es scheint einen Fehler zu geben: "Die Jinja-Variable 'str object' hat kein Attribut 'name'". Ich habe in der {% for user, data in salt['pillar.get']('users', {}).iteritems() %}Datei user / init.sls auf Folgendes zurückgegriffen: Dadurch wird die sls-Datei durchgehend erheblich geändert. Wenn ich ein funktionierendes Beispiel finde, werde ich es veröffentlichen.
Mike S
Follow-up: Wenn Sie, lieber Reisender, diesen Code verwenden möchten, enthält er meiner Meinung nach eine Reihe von Fehlern. Zum Beispiel verursachen die Doppelpunkte nach "fred" und "barney" Salz, ebenso wie das "end for" und "end if" (sie sollten dort keine Leerzeichen enthalten). Wieder vermute ich, dass die Initiale für das Konstrukt fehlerhaft ist, aber ich weiß derzeit nicht viel über Salz, daher kann ich nicht sicher sein. Vorsichtsmaßnahme Programmierer. Für mich selbst werde ich mit dem iteritems () -Konzept arbeiten.
Mike S
Entschuldigung, Dan, ich erhalte immer noch testminion: Daten konnten nicht kompiliert werden: ---------- Rendering von SLS 'Basis: Benutzer' fehlgeschlagen: Jinja-Variable 'str object' hat kein Attribut 'name', wenn ich: salt ausführe testminion state.highstate test = True .... Ich habe Ihren Text oben wörtlich kopiert. Der einzige Zusatz war meine Datei /srv/salt/top.sls, die ein einfacher 3-Liner ist (base:, '*':, und -users).
Mike S
Ich werde einen Docker-Container aufdrehen und ihn sortieren, es sei denn, Sie kommen zuerst dazu?
Dan Garthwaite
Die Meldung "Daten konnten nicht kompiliert werden" wurde durch das Dateinamensuffix ".sls" in /srv/pillar/top.sls verursacht. Dann bin ich auch auf Probleme gestoßen. Bitte beachten Sie, dass ich viel davon neu geschrieben habe. Ich musste user.sshpriv vorerst löschen, es wird gerade spät und ich bekomme immer wieder Probleme mit --- im Textinhalt.
Dan Garthwaite
0

Es sollte wahrscheinlich angemerkt werden, dass es in Bezug auf die ursprüngliche Frage eine andere einfache Lösung gibt, wenn das source: salt://...Format nicht funktioniert file.managed- wie es immer noch passiert istsalt-ssh wegen Bug https://github.com/saltstack/salt/issues/38458 das war da behoben - und das ist contents:mit dem Dateibaum externe Säule zu wechseln , die auch von Dateien auf dem Master gesichert wird.

Das file_tree ext_pillar ist an dokumentiert https://docs.saltstack.com/en/latest/ref/pillar/all/salt.pillar.file_tree.html#module-salt.pillar.file_tree heute. Es existiert seit Version 2015.5.0, ist also neuer als die ursprüngliche Frage und Antwort, aber es ist eine Lösung, die heute einigermaßen gut verfügbar ist.

In der Tat ist es auch in den FAQ unter https://docs.saltstack.com/de/latest/faq.html#is-it-possible-to-deploy-a-file-to-a-specific-minion-without -andere-Schergen, die Zugang dazu haben

Josip Rodin
quelle