Ansible:检查文件是否只包含给定的行,不再包含

时间:2017-11-02 17:19:24

标签: security ansible ssh-keys system-administration

通过使用Ansible,我尝试确保服务器的.ssh/authorized_keys文件只包含一组给定的ssh密钥。无论安排如何。

  1. 如果缺少一个,请添加它(没问题,lineinfile
  2. 如果其他人潜入额外的密钥(不在" with_items"列表中),请将其删除并返回一些警告或其他内容。嗯......"改变了#34;也可以接受,但是以某种方式区分"缺失"会很好。并且"潜入"线。
  3. 第一部分很简单:

    - name: Ensure ssh authorized_keys contains the right users
      lineinfile:
        path: /root/.ssh/authorized_keys
        owner: root
        group: root
        mode: 0600
        state: present
        line: '{{ item }}'
    
      with_items:
        - ssh-rsa AABBCC112233... root@someserver.com
        - ssh-rsa DDEEFF112233... user@anothersomeserver.com
    

    但第二部分看起来更棘手。至少要用简短优雅的代码完成它。

    有什么想法吗?

1 个答案:

答案 0 :(得分:2)

authorized_key_module并且有exclusive选项 但要注意exclusive不适用于with_items

使用类似的东西:

- name: Ensure ssh authorized_keys contains the right users
  authorized_key:
    user: root
    state: present
    exclusive: yes
    key: '{{ ssh_keys | join("\n") }}'
  vars:
    ssh_keys:
      - ssh-rsa AABBCC112233... root@someserver.com
      - ssh-rsa DDEEFF112233... user@anothersomeserver.com         

使用前测试!

如果您在文件中有密钥,则可以找到有用的this答案。