You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Chef中使用bash资源执行passwd命令并传入密码变量

解决Chef中通过bash资源设置用户密码的问题

我懂你现在的困扰——直接调用passwd的话,它默认是交互式的,根本没法直接传入密码变量对吧?别慌,咱们用非交互式的方式就能搞定,下面给你两种实用方案:

方案1:用chpasswd命令(推荐,通用性更强)

chpasswd可以从标准输入读取用户名:密码的格式,一次性完成密码设置,完全不需要手动交互。把你的代码改成这样就行:

password = 'abc123'
username = 'adminblah'

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

这里借助Ruby的字符串插值#{username}和#{password},把Chef里定义的变量直接嵌入到bash代码块中,管道符|把echo的输出传给chpasswd,就能自动完成密码设置了。

方案2:用passwd --stdin(部分Linux发行版支持)

如果你的目标系统是CentOS、RHEL这类支持passwd --stdin选项的系统,也可以用这种方式:

password = 'abc123'
username = 'adminblah'

bash 'analytics_password' do
  code <<-EOH
    echo "#{password}" | sudo passwd --stdin #{username}
  EOH
end

这个命令会让passwd直接从标准输入读取密码,同样能避开交互环节。

重要提醒

生产环境里绝对别硬编码密码!建议用Chef Vault或者加密数据袋(encrypted data bags)来存储敏感的密码信息,防止密码泄露。

内容的提问来源于stack exchange,提问作者user9753902

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:49:40