如何使用随机密码创建用户并使用puppet将其存储到文件中

时间:2014-01-04 22:15:47

标签: puppet

我想使用随机生成的密码为服务(postgres,rabbitmq ...)创建用户。然后应将此密码写入主机上的文件。然后,应用程序使用包含env vars的此文件连接到这些服务。

我不想将这些密码存储在别处。

postgresql::server::db { $name:
  user     => $name,
  password => postgresql_password($name, random_password(10)),
}

然后我想将这个密码以PG_PASS ='相同密码'的形式插入配置文件中,但只有当用户不在时才会发生这一切。

2 个答案:

答案 0 :(得分:4)

在纯Puppet

一个技巧是以某种方式定义自定义类型:

define authfile($length=24,$template,$path) {
  $passwordfile = "/etc/puppet/private/${::hostname}/${::title}"
  $password = file($passwordfile,'/dev/null')
  @@exec { "generate-${title}":
    command => "openssl rand -hex -out '$passwordfile' 24",
    creates => $passwordfile,
    tag     => 'generated_password'
  }
  file { $path:
    content => template($template);
  }
}

在你的傀儡上,有类似的东西:

Exec<|| tag = 'generated_password' ||>

然后,您可以将$template变量传递给可用变量$password的模板名称。您将需要注意如何定义这些authfile类型(因为它在puppetmaster上创建文件,您将需要处理恶意事实),并且您需要在主机上运行一次puppet(所以创建导出的资源),一旦在puppetmaster上(以便生成机密文件),然后再次在主机上(以便读取机密文件)以使其工作。

使用自定义功能

另一个解决方案是编写一个自定义函数random_password,它将使用fqdn并使用存储在puppetmaster(使用HMAC)的秘密对其进行签名来设置密码。这样你就可以获得一个密码,在没有得到秘密的情况下无法猜到,也没有额外的木偶往返。

答案 1 :(得分:2)

我自己还没试过。但trocla看起来与您正在寻找的完全一样。 Here's a little intro

编辑:在尝试了trocla之后,我可以告诉你它有点像魅力:-)
您需要安装trocla module才能在木偶中使用它。