用Ansible进行用户pipe理的最新技术是什么?

我已经使用Ansible取得了巨大的成功,现在已经有3年时间来pipe理不断增长的linux系统了。 在深入探讨我的问题之前,我需要设置一些背景。

作为我日常工作的一部分,我为所有在一家企业/孵化器公司下运营的公司进行系统devise,部署和维护。 在我们的投资组合公司之间有很多相互授粉,因此,我们不能说只有用户A,B和C需要访问X公司的系统。 他们也可能需要访问Y公司的系统。 这很复杂,因为每个公司的可靠环境都存在于不同的git存储库中。 这意味着将用户部署到不同的公司系统时有很多代码重复。 我最终复制/粘贴这样的代码块来将用户部署到某个公司的系统:

- name: add several users user: > name={{ item.name }} state=present groups={{ item.groups }} uid={{ item.uid }} password={{ item.password }} shell=/bin/bash with_items: - { name: 'user1', groups: 'ssh-access,sudo', uid: '501', password: '<redacted>' } - { name: 'user2', groups: 'ssh-access,sudo', uid: '502', password: '<redacted>' } tags: users - name: authorized_keys - user1 action: authorized_key user=user1 key="{{ lookup('file', 'pubkeys/user1') }}" manage_dir=yes tags: - pubkeys - users - name: authorized_keys - user2 action: authorized_key user=user2 key="{{ lookup('file', 'pubkeys/user2') }}" manage_dir=yes tags: - pubkeys - users 

当我有一个<5用户pipe理,这工作正常,但随着用户群的增长,保持最新的密钥轮换,新的密码等变得越来越繁重。

随着背景和背景的设置,在我的问题上:

假设使用集中式身份validation系统(LDAP等)不是一种select,我怎样才能创build一个集中的用户数据库,使各种有用的剧本可以使用? 我希望能够维护用户,用户名,密码哈希值和公钥的一个中心列表,然后能够将用户(具有自定义每个主机组成员资格)部署到每个公司的主机。

我正在构想一些类似的游戏结构:

 - name: Deploy users user_management: - { name: "user1", groups: "sudo" } - { name: "user1", groups: "sudo" } 

…其中每个用户的uid,散列和公共密钥将从中央列表中拉出并照常部署。

那么,我有什么select? 我一直在思考这个问题已经有一段时间了,而且还没有能够比我已经做的更好。 我可以做一些自定义事实文件来保存我的用户数据库吗?

    你需要分开你的游戏和你的数据。

    我有一个单一的回购,所有我的angular色,事实等部署到广泛的客户系统。 我确保所有angular色都是可重用的,并且没有数据。 在host_vars/fqdn.ymlgroup_vars/customer_name.yml我定义了该客户或远程系统特有的数据。

    我的大多数angular色随着时间的推移,根据需要扩展,而不是做任何事情from roles/foo/main.yml我有roles/foo/debian-foo.ymlroles/foo/openbsd-foo.yml只包括操作系统或其他条件匹配。

    简化的roles/adduser/main.yml可以包括:

     - user: name={{ item.name }} ... with_items: - customer_users 

    group_vars/ACME.yml可以包含这个:

     customer_users: - name: sausage uid: 32153 - name: beans uid: 1024 

    在你的情况下,只要angular色文件夹是一个共享子模块,在你的所有客户中都是相同的,那么在他们的每个git仓库中都可以有独立的有效环境。