将 puppet 用于集中用户和 SSH 密钥存储

Using puppet for centralized users and SSH key storage

我有一个工作木偶配置与主人和两个代理人。此配置的范围是有一个清单,其中包括所有用户和用户 SSH 密钥,如下所示;

user { 'puppet28':
    ensure => present,
    comment => 'puppet28',
    shell => '/bin/bash',
    home => '/home/puppet28',
    managehome => true,
    groups => ['agent99_group'],['agent_group'],
  }
  ssh_authorized_key { 'puppet28_ssh':
  user => 'puppet28',
  type => 'ssh-rsa',
  key => "AAAAB3NzaC1yc2EAAAADAQABAbKesokhkUNfMyvmvtLo32UKQlfQgt2sg8wltlveM6w=="
  }

我的意图是从每个代理创建一个目录 运行,并在每个节点上创建用户。由于目前的代码,agent99_group 是一个节点上的组,agent_group 是另一个节点上的组节点.

因为这两个组不在同一个节点上,所以当我做一个人偶时我得到一个错误 运行 其中一个组不存在并且用户创建 运行 失败并显示以下内容错误;

错误:无法创建用户 puppet28:执行“/usr/sbin/useradd -c puppet28 -G ageome/puppet28 -s /bin/bash -m puppet28”返回 6: useradd: group 'agent_group' 没有 错误:/Stage[main]/User/User[puppet28]/ensure:从 'absent' 更改为 'present' failed:t28:执行 '/usr/sbin/useradd -c puppet28 -G agent99_group,agent_group -d /home/put28' 返回 6: useradd: 组 'agent_group' 不存在

显然这是预料之中的,我的问题是是否有一种方法可以将包含 SSH 密钥的用户创建代码放在一个地方并将其推送到多个节点。

重要的是,用户和 SSH 密钥最好输入一次,因为当此实现投入生产时,它将包含数百个用户,超过大约 40-50 个容器,因此无法扩展以复制和粘贴用户详细信息和 SSH 密钥在每个节点的清单中。

到目前为止,我已经尝试使用 Hiera 和 puppet forge 模块来执行此操作,但结果总是不得不在不同的清单中多次复制和粘贴某些内容。

任何帮助或其他解决方案?

最简单的例子是这样的。

# This could be a module or a profile if using roles and profiles.
class user_management {
   
  user { bob:
    ensure         => present,
    managehome     => true,
    purge_ssh_keys => true,
  }

  ssh_authorized_key { 'bob@example.com':
    ensure => present,
    user   => 'bob',
    type   => 'ssh-rsa',
    key    => lookup(user_management::bob),
  }
}

然后在 control-repo 中,您希望能够集中查找值;

# data/common.yaml
---
user_management::bob: 'bobs-key'

您应用 user_management class 的任何节点都将应用 bob 用户及其密钥。一种更具可扩展性的方法是使用一组用户;

class user_management {
  $users = ['bob', 'bill']
   
  user { $users:
    ensure         => present,
    managehome     => true,
    purge_ssh_keys => true,
  }

  $users.each |$user| {
    ssh_authorized_key { "${user}@example.com":
      ensure => present,
      user   => $user,
      type   => 'ssh-rsa',
      key    => lookup("sshkey::${user}"),
    }
  }
}

# data/common.yaml
---
user_management::bob: 'bobs-key'
user_management::bill: 'bills-key'