>问题:
使用Ansible,如何将多个公钥文件 (.pub
( 设置为部署在用户的authorized_keys
文件中,而不是使用包含公共 ssh 密钥列表的单个文件?
场景和要求:
- 我有多个公共 ssh 密钥作为
.pub
文件存储在一个中心位置 - 我想从
vars
文件创建新用户 - 每个用户应具有(无/一个特定/多个(公共 SSH 密钥,这些密钥来自部署到各自
authorized_keys
文件的.pub
文件 - 由于以下原因,已部署
.pub
文件的列表可能会更改:.pub
文件的内容由于例如而更改。 私钥泄露vars
文件中的用户应分配其他公钥文件
- 我不想为每个用户通过"列表"文件来替换密钥
当前部署:
变量文件 (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 Role 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]
问题场景:
support-a
的 ssh 密钥遭到破坏,所有用户在其authorized_keys
文件中拥有该公钥都需要替换为新的公钥- 我需要(
sed
(浏览所有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']"
我也尝试了这个(https://stackoverflow.com/a/54079374(解决方案,但我想场景和要求有点不同,在我的场景中没有什么可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]