使用 Ansible 中的 authorized_key 模块将多个 public ssh 密钥分配给用户定义

Assign multiple public ssh keys to user definitions with authorized_key module in Ansible

问题:

使用 Ansible,我如何设置多个 public-key 文件 (.pub) 部署在用户的 authorized_keys 文件中,而不是使用包含列表的单个文件public ssh 密钥?


场景及要求:


当前部署:

变量文件 (vars/users.yml):

users:
  - username: "bob"
    sshkey: "{{ lookup('file', 'files/ssh_keys/bob.keys') }}"
    ...
  - username: "alice"
    sshkey: "{{ lookup('file', 'files/ssh_keys/alice.keys') }}"
    ...

bob.keys的内容:

ssh-rsa admin-ssh-key= admin
ssh-rsa support-a-ssh-key= support-a
ssh-rsa bobs-ssh-key= hi im bob

alice.keys的内容:

ssh-rsa admin-ssh-key= admin
ssh-rsa alice-ssh-key= hi im alice
ssh-rsa accounting-clerk-ssh-key= checking your progress

ansible 角色main.yml 文件:

 - name: Add SSH keys
  authorized_key:
    user: "{{ item.username }}"
    state: "{{ item.sshkeystate }}"
    key: "{{ item.sshkey }}"
    exclusive: yes
  with_items: "{{ users }}"
  tags: [add ssh keys]

问题场景:


我试过了:

变量文件:

users:
  - username: "bob"
  sshkey:
    - "{{ lookup('file', 'files/ssh_keys/admin.pub') }}"
    - "{{ lookup('file', 'files/ssh_keys/support_a.pub') }}"
    - "{{ lookup('file', 'files/ssh_keys/bob.pub') }}"
  ...
  - username: "alice"
  sshkey:
    - "{{ lookup('file', 'files/ssh_keys/admin.pub') }}"
    - "{{ lookup('file', 'files/ssh_keys/alice.pub') }}"
    - "{{ lookup('file', 'files/ssh_keys/accounting_clerk.pub') }}"

但是,我在执行 ansible 角色时遇到了这个错误: "msg": "invalid key specified: ['ssh-rsa admin-ssh-key= admin', 'ssh-rsa support-a-ssh-key= support-a', 'ssh-rsa bobs-ssh-key= hi im bob']"

我也尝试了一些与此 () 解决方案类似的方法,但我想场景和要求有点不同,selectattr() 在我的场景中没有任何东西(我认为) .


谁能告诉我如何解决这个问题,或者我的方向完全错了? 干杯。

据我所知,您的剧本与您链接到的剧本唯一不同的部分是 "\n".join() 部分,它将列表折叠成一个文本块。正如 ansible 正确指出的那样,您正在向期望 str

的属性提供 list[str]

我不相信你的情况需要使用 selectattr 或任何过滤,因为你一直想要所有的密钥。因此:

- name: Add SSH keys
  authorized_key:
    user: "{{ item.username }}"
    state: "{{ item.sshkeystate }}"
    key: '{{ item.sshkey | join("\n") }}'
    exclusive: yes
  with_items: "{{ users }}"
  tags: [add ssh keys]