使用 chef 来 运行 bash passwd

Use chef to run bash passwd

我很难弄清楚如何使用 chef 来 运行 bash 命令(密码)

我知道如何设置 bash 资源块,但我该如何设置才能使用变量 password = 'abc123'。在这个例子中,我想要为的用户是 adminblah

bash 'analytics_password' do
  code <<-EOH
    sudo passwd adminblah
  EOH
end

我不确定如何将密码变量放入其中。

您可以通过多种方式设置用户密码。如果你想使用 bash 资源,你可以这样做:

# Backslashes are escaped because of ruby
bash 'analytics_password' do
  code <<-EOH
    echo -e "#{password}\n#{password}\n" | passwd adminblah
  EOH
  sensitive true
end

上面的回显复制了输入然后确认密码,如果你在命令行上运行这个。

您也可以考虑使用 chpasswd(如果可用):

bash 'analytics_password' do
  code <<-EOH
    echo "adminblah:#{password}" | chpasswd
  EOH
  sensitive true
end

在上述两种情况下,sensitive 属性 隐藏了 Chef 日志中密码的任何潜在输出。

最好的选择可能是查看 user resource. This is a bit more complicated as you'll need to create a Password Shadow Hash(示例在 link 中提供),但应该考虑。

不知怎的,我发现这烦人的麻烦...

我想到了两个选项:

1。将 pwd 传递给 chpasswd,它的作用是:

CHPASSWD(8)

NAME chpasswd - update passwords in batch mode

SYNOPSIS chpasswd [options]

DESCRIPTION The chpasswd command reads a list of user name and password pairs from standard input and uses this information to update a group of existing users. Each line is of the format:

   user_name:password

因此,您的厨师食谱可能如下所示:

password = 'my-secret-password'

bash 'analytics_password' do
  code <<-EOH
    sudo sh -c 'echo "adminblah:#{password}" | chpasswd'
  EOH
end

2。使用 user 资源

hash = `openssl passwd -1 -salt NCC #{password}`
hash = hash.gsub(/\n/, '')

user 'a user' do
  username 'adminblah'
  password hash.to_s
end

我希望至少有一种方法能奏效:)

此致, 亚雷克