“net ads join”在puppet exec中失败,但直接从命令行运行OK

我有以下exec将Linux(CentOS 6)主机连接到Active Directory域。 从bashterminal以root用户身份运行时,它运行成功,主机正确joinAD域。

但是,在puppet中运行时, net ads join命令将失败:

无法join域:无法为机器帐户设置密码(NT_STATUS_ACCESS_DENIED)

这是执行官

 exec { 'adjoin': command => "kinit [email protected] -k -t /etc/krb5.keytab && net ads join createcomputer='Machines/Servers/Linux Servers' osName='${operatingsystem}' osVer=${operatingsystemrelease} -k", unless => "net ads testjoin -k | grep -q 'Join is OK'", provider => shell, user => root, path => '/usr/sbin:/usr/bin:/sbin:/bin', require => [ File['/etc/krb5.conf'], File['/etc/krb5.keytab'], ], logoutput => true, } 

我已经尝试过,没有provideruser参数。

事实certificate,我必须在exec中使用environment参数明确地设置一些环境variables,特别是LOGNAME

 exec { 'adjoin': command => "kinit [email protected] -k -t /etc/krb5.keytab && net ads join createcomputer='Machines/Servers/Linux Servers' osName='${operatingsystem}' osVer=${operatingsystemrelease} -k", unless => "net ads testjoin -k | grep -q 'Join is OK'", provider => shell, user => root, path => '/usr/sbin:/usr/bin:/sbin:/bin', require => [ File['/etc/krb5.conf'], File['/etc/krb5.keytab'], ], logoutput => true, environment => [ 'USER=root', 'LOGNAME=root', 'HOME=/root', ], } 

有两个原因:

  1. 净广告-kjoin失败,没有LOGNAME envvariables

  2. 在执行任务期间,LOGNAME,USER和HOME是由puppet专门取消的。 这是一个deviseselect,详细的票我链接到。

为了理智,我也设置了USER和HOME,不过我不确定他们是否需要net ads