asi*_*ibs 6 ssh ssh-keys ansible ansible-2.x
我正在使用Ansible管理许多不同的服务器.每个服务器上有多个Linux用户,如readonly,admin等.
我的Ansible项目中还有一些文件,其中包含特定人群的所有SSH密钥 - 例如.AppDevelopersPublicKeys,DbaPublicKeys等等.
不同的人群在不同的服务器上具有不同的访问级别.例如.在WebServer上,AppDevelopers具有管理员访问权限,而DBA可能只具有读取权限.在数据库服务器上,反之亦然.
为了实现上述目标,我有不同类型的服务器的不同Ansible角色(例如WebAppServer,DatabaseServer等).然后,这些角色具有变量readonly_key_files并admin_key_files针对它们进行设置,列出了应该具有只读和管理访问权限的角色的相应密钥文件.
理想的解决方案是:
AppDeveloperPublicKeysAnsible文件中删除公钥,服务器也会删除此密钥--diff选项运行Ansible 时显示文件的准确差异我正在使用Ansible 2.2.0.0
以下所有内容均不符合我的要求:
authorized_key with_file
- authorized_key: user=readonly exclusive=no key={{item}}
with_file: {{readonly_key_files}}
Run Code Online (Sandbox Code Playgroud)
exclusive必须设置为noauthorized_key与事实
解决方案按照https://github.com/ansible/ansible-modules-core/pull/4167/files
- name: "Generate developer keys from multiple files"
set_fact: dev_key_list="{{ lookup('file', item) }}"
register: dev_keys
with_items: '{{developer_key_files}}'
- name: "Merge developer keys into single list"
set_fact: dev_keys_string={{ dev_keys.results | map(attribute='ansible_facts.dev_key_list') | join('\n') }}
- authorized_key: user=readonly exclusive=yes key={{dev_keys_string}}
Run Code Online (Sandbox Code Playgroud)
authorized_keys即使没有添加/删除密钥,多次运行playbook 也会导致步骤发生变化来自文件.它似乎也不符合要求3,因为当我运行时,--check --diff我无法确切地看到Ansible认为哪些行正在改变,它只是强调文件将被更改.authorized_key with_template
- authorized_key: user=readonly exclusive=no key={{item}}
with_template: {{readonly_keys.j2}}
Run Code Online (Sandbox Code Playgroud)
其中readonly_keys.j2的样子:
{% for key_file in readonly_key_files %}
{% include '/files/' ~ key_file %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
--check --diff它时,它只显示SSH文件是否会被更改,而不是确切地添加/删除哪些行,正如我所期望的那样.有没有其他方法可以解决这个问题?似乎在Ansible中使用--diff时可能存在问题authorized_keys...我能想到的唯一其他方法是根本不使用authorized_keys,而是将其作为常规文件/模板进行管理,这应该向我显示准确的差异(如以及满足要求1和2).
我在未回答的问题列表中找到了这个问题并做了一些研究。看起来 diff 功能在您提出问题后不久就被添加到了 ansible 中的authorized_keys 模块中。该提交于 2017 年初合并,似乎已包含在 2.3 及更高版本中。看来您的第三个选项现在应该可以使用,但如果没有您的密钥设置,我无法确定。
https://github.com/ansible/ansible/pull/19277