如何使用 chef 为 nginx 创建 .htpasswd 文件

How to create .htpasswd file for nginx using chef

我是 Chef 的新手,我正在尝试生成一个 .htpasswd 文件来存储用户哈希,我经历了一些 links 但这没有帮助。 我需要 ngnix 来保护 Kibana,我想为使用 openssl 的用户生成密码。我创建了一个模板文件作为 .htpasswd_temp.erb 它看起来像这样:

<% @kibana_user.each do |user| %>
<%= user %>: 

<% end %>

我的食谱是:

kibana_configs = node['kibana']['kibana_auth']
template 'path/to/.htpasswd' do 
source '.htpasswd_temp.erb '
variables(
  kibana_user: kibana_configs['kiba_user']
)
end

我创建了一个角色文件,其中定义了所有默认属性(包括 kiba_user)。 上面的代码将用户添加到 .htpasswd 文件,但我不知道如何使用 openssl 生成密码。 Openssl 命令使用执行资源可以正常工作,但执行资源在模板资源内部不起作用,因此不会反映在 .htpasswd file.I 中,我真的很困惑。非常感谢您的帮助^^

以下食谱片段可能对您有用...

它假定您熟悉 encrypted data bag 并且您已将您的凭据存储在名为 creds 的数据包中,其中包含名为 nginx 的加密项,其中包含 usernamepassword 键。

htpassed_file = '/root/.htpasswd'

chef_gem 'htauth'

ruby_block 'create .htpasswd' do
  block do
    require 'htauth'
    creds = data_bag_item('creds', 'nginx')
    HTAuth::PasswdFile.open(htpassed_file, HTAuth::File::CREATE) do |pf|
      pf.add(creds['username'], creds['password'])
    end
    FileUtils.chmod 0o600, htpassed_file
  end
end

您也可以使用配方 https://github.com/redguide/htpasswd 结合数据包来加密您的密码(以及用户名)。

htpasswd "/etc/nginx/htpassword" do
  user "foo"
  password "bar"
end