diff --git a/pillar.example b/pillar.example index 95de009..df81335 100644 --- a/pillar.example +++ b/pillar.example @@ -57,6 +57,10 @@ users: ssh_keys: privkey: PRIVATEKEY pubkey: PUBLICKEY + # you can provide multiple keys, the keyname is taken as filename + # make sure your public keys suffix is .pub + foobar: PRIVATEKEY + foobar.pub: PUBLICKEY # ... or you can pull them from a different pillar, # for example one called "ssh_keys": ssh_keys_pillar: diff --git a/users/init.sls b/users/init.sls index 9b6f1ac..a33d206 100644 --- a/users/init.sls +++ b/users/init.sls @@ -175,35 +175,35 @@ user_keydir_{{ name }}: {% endif %} {% if 'ssh_keys' in user %} - {% set key_type = 'id_' + user.get('ssh_key_type', 'rsa') %} -users_user_{{ name }}_private_key: + {% for _key in user.ssh_keys.keys() %} + {% if _key == 'privkey' %} + {% set key_name = 'id_' + user.get('ssh_key_type', 'rsa') %} + {% elif _key == 'pubkey' %} + {% set key_name = 'id_' + user.get('ssh_key_type', 'rsa') + '.pub' %} + {% else %} + {% set key_name = _key %} + {% endif %} +users_{{ name }}_{{ key_name }}_key: file.managed: - - name: {{ home }}/.ssh/{{ key_type }} - - user: {{ name }} - - group: {{ user_group }} - - mode: 600 - - show_diff: False - - contents_pillar: users:{{ name }}:ssh_keys:privkey - - require: - - user: users_{{ name }}_user - {% for group in user.get('groups', []) %} - - group: users_{{ name }}_{{ group }}_group - {% endfor %} -users_user_{{ name }}_public_key: - file.managed: - - name: {{ home }}/.ssh/{{ key_type }}.pub + - name: {{ home }}/.ssh/{{ key_name }} - user: {{ name }} - group: {{ user_group }} + {% if key_name.endswith(".pub") %} - mode: 644 + {% else %} + - mode: 600 + {% endif %} - show_diff: False - - contents_pillar: users:{{ name }}:ssh_keys:pubkey + - contents_pillar: users:{{ name }}:ssh_keys:{{ _key }} - require: - user: users_{{ name }}_user {% for group in user.get('groups', []) %} - group: users_{{ name }}_{{ group }}_group {% endfor %} + {% endfor %} {% endif %} + {% if 'ssh_auth_file' in user or 'ssh_auth_pillar' in user %} users_authorized_keys_{{ name }}: file.managed: