将 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'
我有一个工作木偶配置与主人和两个代理人。此配置的范围是有一个清单,其中包括所有用户和用户 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'