如何让Vagrant/Puppet正确添加Linux密码?

如何让Vagrant/Puppet正确添加Linux密码?,vagrant,puppet,Vagrant,Puppet,我正在尝试使用Vagrant创建一个Ubuntu虚拟机。我的主机是Windows7,我的basebox是precise64。 如果我按照建议的方式在Puppet中添加用户,如下所示: user { "johnboy": ensure => present, managehome => true, password => '$6$ev8faya2$M2pB3YQRpKUJMnJx6LnsyTbDdi.umsEEZttD01pk8ZSfMGrVmln

我正在尝试使用Vagrant创建一个Ubuntu虚拟机。我的主机是Windows7,我的basebox是precise64。 如果我按照建议的方式在Puppet中添加用户,如下所示:

    user { "johnboy":
    ensure => present,
    managehome => true,
    password => '$6$ev8faya2$M2pB3YQRpKUJMnJx6LnsyTbDdi.umsEEZttD01pk8ZSfMGrVmlnjoVhIHyuqYt3.yaG1SZjaoSxB39nNgFKb//',
    groups => ["admin"],
    shell => "/bin/bash";
 }
在vagrant设置了我的框并且散列不在/etc/passwd中之后,我登录

如果我没有设置资源类型,而是像这样使用exec和usermod

user { "johnboy":
    ensure => present,
    managehome => true,
    groups => ["admin"],
    shell => "/bin/bash";
}

exec { 'set password':
    command => "usermod -p '$6$ev8faya2$M2pB3YQRpKUJMnJx6LnsyTbDdi.umsEEZttD01pk8ZSfMGrVmlnjoVhIHyuqYt3.yaG1SZjaoSxB39nNgFKb//' johnboy",
    require => User[johnboy];
}
我在/etc/passwd中只得到了散列的一部分

johnboy:.umsEEZttD01pk8ZSfMGrVmlnjoVhIHyuqYt3.yaG1SZjaoSxB39nNgFKb//:16101:0:99999:7:::
有些页面建议安装ruby shadow,因此我尝试了以下方法:

gem install ruby-shadow
但是,安装失败,可能是因为我没有安装Ruby。Vagrant是一个100MB的下载。管理密码的gem真的不包括在内吗


如何让Vagrant/Puppet正确设置密码?

这是因为它存储在/etc/shadow文件中。这是出于安全原因,因为它只能由root/super用户访问

像这样避开散列中的美元符号,它应该会起作用

exec { 'set password':
    command => "usermod -p '\$6\$ev8faya2\$M2pB3YQRpKUJMnJx6LnsyTbDdi.umsEEZttD01pk8ZSfMGrVmlnjoVhIHyuqYt3.yaG1SZjaoSxB39nNgFKb//' johnboy",
    require => User[johnboy];
}

流浪汉的规定就像根一样,不是吗?这并不能解释当我放入hash并运行usermod时,其中只有一半进入/etc/passwd。在密码中转义$符号,如\$,这是必需的,因为您将命令包装在双引号中,因此允许变量插值