在大厨食谱中将用户写入.htpasswd

时间:2015-04-24 01:40:27

标签: ruby chef chef-recipe .htpasswd chef-solo

在由chef-solo / vagrant调用的厨师食谱中,我试图从用户的对象中编写.htpasswd文件。 我在vagrantfile中指定了这样的用户......

  chef.json = {
      :apache => {
          ...
          :my_users => {
              :john => "test",
              :matt => "test2"
          }
          ...

我的厨师食谱现在看起来像这样:

file "/etc/apache2/.htpasswd" do
  content "john:n5MfEoHOIQkKg"
  owner "#{node['apache']['user']}"
  group "#{node['apache']['group']}"
  mode '0644'
  action :create
end

正如你所看到的,我在那里编写了John的硬编码凭证 - 然而,我不是Ruby开发者,而且我在这里缺少一些非常基本的知识...

如何将node['apache']['my_users']属性(在chef.json中定义)中的所有用户凭据循环写入文件,而为每个明文密码创建密码哈希?

注意:我试图避免在此简单文件中使用模板。

3 个答案:

答案 0 :(得分:2)

我使用the LWRP Charlie suggested完成了这项工作。

第一步是将用户的定义修改为正确的数组:

chef.json = {
    :apache => {
        ...
        :my_users => [ 
            { :username => "john", :password => "test1" },
            { :username => "matt", :password => "test2" }
        ]
        ...

我将htpasswd依赖项包含在元数据和bershelf中。 然后在我的配方中,我使用htpasswd调用在循环中创建用户:

node[:apache][:my_users].each do |user|
  htpasswd "/etc/apache2/.htpasswd" do
    user user['username']
    password user['password']
  end
end

答案 1 :(得分:0)

htpasswd手册页看起来像是在密码上使用MD5哈希。

也许你可以在食谱的Ruby代码中generate md5 hashes

答案 2 :(得分:0)

您可以采用原生方式进行,需要安装htpasswd

execute 'set password' do
  sensitive true
  command "htpasswd -cb /etc/htpasswd.users #{user} #{password}"
  creates '/etc/htpasswd.users'
end

file '/etc/htpasswd.users' do
  owner 'www-data'
  group 'www-data'
  mode 0o600
end