使用ansible添加多个SSH密钥

时间:2014-10-05 14:09:57

标签: ssh batch-processing ssh-keys ansible ansible-playbook

我编写了一个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密钥?

1 个答案:

答案 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