使用chef运行bash passwd

使用chef运行bash passwd,bash,chef-infra,passwd,Bash,Chef Infra,Passwd,我很难弄清楚如何使用chef运行bash命令(passwd) 我知道如何设置bash资源块,但如何设置它,以便使用变量password='abc123'。在本例中,我想为的用户是adminblah bash 'analytics_password' do code <<-EOH sudo passwd adminblah EOH end bash'analytics\u password'do code有几种方法可以实现设置用户密码。如果要使用bash资源,可以执行

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

我知道如何设置bash资源块,但如何设置它,以便使用变量
password='abc123'
。在本例中,我想为的用户是
adminblah

bash 'analytics_password' do
  code <<-EOH
    sudo passwd adminblah
  EOH
end
bash'analytics\u password'do

code有几种方法可以实现设置用户密码。如果要使用
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
在上述两种情况下,
sensitive
属性在Chef日志中隐藏任何可能的密码输出


最好的选择可能是查看资源。这有点复杂,因为您需要创建一个(链接中提供了示例),但应该加以考虑

不知怎的,我觉得这太麻烦了

我想到了两个选择:

1.将pwd传递给
chpasswd
,其作用如下: CHPASSWD(8)

名字 chpasswd-在批处理模式下更新密码

概要 chpasswd[选项]

描述 chpasswd命令从标准输入读取用户名和密码对的列表,并使用此信息更新组 现有用户的数量。每行的格式如下:

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

password = 'my-secret-password'

bash 'analytics_password' do
  code <<-EOH
    sudo sh -c 'echo "adminblah:#{password}" | chpasswd'
  EOH
end
我希望至少有一种方法能奏效:)

致以最良好的祝愿,
Jarek

谢谢,你能解释一下为什么双重密码是
#{password}?这会重复密码、换行符和密码,然后是换行符。这将复制在提示时按enter键输入密码,然后在提示时按enter键确认密码。它基本上是为您完成输入。仅供参考,因为您正在使用密码,这些资源应该标记为。这样做是不安全的,请不要这样做。任何在命令行选项中放置明文密码的操作都可能存在安全问题。这适用于本地且未连接internet的服务(VLAN没有互联网接入,3个人只能通过特定设备和ssh访问系统。这是为了开发。在这种情况下,安全性并不重要,除非有另外一个简单的解决方案,只需要很少的努力就可以设置/切换到。更简单的解决方案是在本地某处预先生成哈希密码然后使用
user
资源及其
password
属性对用户进行设置。这将完全删除Chef中的明文密码。@coderanger只是免费添加额外的工作。我在这里得到的东西是有效的(我想)。此外,没有安全风险,在有工作选项的情况下,关心密码是否为纯文本是毫无意义的。有时不需要最佳做法。这就像我给你一台计算机,却没有在上面输入密码,因为没有安装任何东西、没有程序、文件等。然后没有将其连接到internet或任何其他网络网络。我在这里用纯文本输入密码的风险相同。这当然是在增加工作,但你真的想让每个有权访问代码repo的人都能访问使用本食谱的每台服务器吗?
password = 'my-secret-password'

bash 'analytics_password' do
  code <<-EOH
    sudo sh -c 'echo "adminblah:#{password}" | chpasswd'
  EOH
end
hash = `openssl passwd -1 -salt NCC #{password}`
hash = hash.gsub(/\n/, '')

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