Because it took me a while to figure out how to do it cleanly, here’s my solution for adding multiple users with multiple public SSH keys on a server, using Ansible:
in login-vars.yml
users:
- login: "user1"
pass_hash: "$6$G1Q........"
pubkeys:
- "ssh-rsa AAAAB3N.....yBd1 user1@first-key"
- "ssh-rsa AAAAB3N.....eWDp user1@second-key"
- login: "user2"
pass_hash: "$6$G1A........"
pubkeys:
- "ssh-rsa AAAAB3N.....yCDd1 user2@first-key"
- "ssh-rsa AAAAB3N.....eaop user2@second-key"
in roles/setup-users/main.yml
- name: configure user accounts
user:
name={{ item.login }}
append=yes
password={{ item.pass_hash }}
become: yes
with_items:
- "{{ shell_users }}"
- name: Add users public keys
authorized_key:
user={{ item.login }}
key="{% for key in item.pubkeys %}{{ key ~ "\n" }}{% endfor %}"
become: yes
with_items:
- "{{ shell_users }}"