我编写了一个ansible脚本来从远程服务器中删除SSH密钥:
---
- name: "Add keys to the authorized_keys of the user ubuntu"
user: ubuntu
hosts: www
tasks:
- name: "Remove key #1"
authorized_key: user=ubuntu key="{{ item }}" state=absent
with_file:
- id_rsa_number_one.pub
- name: "Remove key #2"
authorized_key: user=ubuntu key="{{ item }}" state=absent
with_file:
- id_rsa_number_two.pub
...
将每个文件添加为不同的任务是荒谬的,所以我尝试使用with_fileglob
:
- name: "Remove all keys at once"
authorized_key: user=ubuntu key="{{ item }}" state=absent
with_fileglob:
- /Users/adamatan/ansible/id_rsa*.pub
但这会失败,如下所示:
失败:[www.example.com] => (item = / Users / adamatan / ansible / id_rsa_one.pub)=> {“失败”:是的, “item”:“/ Users / damatmatan / ansible / ida-rsa-one.pub”} msg:无效密钥 指定:/Users/adamatan/ansible/id_rsa_one.pub
使用唯一任务成功删除了相同的密钥文件,但当它是fileglob
的一部分时失败。
如何使用ansible批量添加或删除SSH密钥?
答案 0 :(得分:11)
我相信您只使用with_fileglob
获取文件名,但with_file
会检索文件的内容。 authorized_key模块需要实际密钥。
所以你仍然应该使用with_fileglob
循环,而不是将文件名发送到" key ="参数,你应该使用file lookup plugin)。
- name: "Remove all keys at once"
authorized_key: user=ubuntu key="{{ lookup('file', item) }}" state=absent
with_fileglob:
- /Users/adamatan/ansible/id_rsa*.pub