我正在使用 vagrant+puppet 配置precise32
VirtualBox 服务器以编程方式添加用户。一切正常,但似乎无法通过 puppet 自动设置密码。这是我的 puppet 脚本:
package { "ruby-shadow":
name => "libshadow-ruby1.8",
ensure => installed,
}
user { 'biff':
home => '/home/biff',
shell => '/bin/bash',
uid => 201,
managehome => 'true',
password => '$6$kxHLEuHW$zHRAZcVLu0XzukqU79bT.PEg./FfcloJiWmlH2rf.Lmnyke7uAaHkQTXvErqikWeraSiHFBwDSMDV4hRImqjr7.',
groups => ['sudo', ],
requires => Package['ruby-shadow'],
}
为了获取哈希值$6$kx...
,我登录虚拟机,运行sudo passwd biff
系统设置密码,然后将哈希密码(中的第二个字段/etc/shadow
)复制到上面的 puppet 脚本中。删除用户重置密码并重新运行 puppet 脚本后,密码未设置,我根本无法登录:
[precise32]$ sudo grep biff /etc/shadow
biff:!:15862:0:99999:7:::
事实上,看起来用户biff
已被锁定在系统之外(/etc/shadow 说明)。我是否将正确的哈希值设置为password
变量?您如何确定它是什么?
看起来一种方法可能是运行usermod
事后设置密码,但这似乎从一开始就违背了使用 Puppet 的初衷。有什么想法吗?
答案1
您使用的 vagrant box 可能正在使用 ruby 库,/opt/vagrant_ruby/lib/1.8/
而不使用任何系统安装的 ruby 库。检查您的 vagrant box 是否有文件/etc/profile.d/vagrant_ruby.sh
。如果有,则该文件将覆盖要puppet
使用的命令,然后确定要使用哪些 ruby 库。尝试删除该文件 ;) 如果一切仍然有效(在系统上安装 puppet 和 libshadow-ruby 后),请使用 重新打包该框并将vagrant package
其重新用作您的precise32
框。
我确信使用 usr 有很多好的理由/opt/vagrant_ruby
,但是它缺少一个非常重要的库,并且在使用框内引入 ruby 库的其他工具时会造成一些混乱。
答案2
如果没有 gem,Puppet 将无法设置密码
libshadow
,因为这是使用影子密码所必需的。如果我没记错的话,有一个关于提供程序的错误消息。
libshadow
需要mkmf.rb
安装,可以在软件包中找到libruby2.0、ruby1.9.1-dev 或 ruby1.8-dev(取决于你的 ruby 版本)
我的清单中有这个:
package { "ruby1.9.1-dev": ensure => installed; "libshadow": ensure => installed, require => Package['ruby1.9.1-dev'], provider => gem; }