我有以下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, }
我已经尝试过,没有provider和user参数。
事实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', ], }
有两个原因:
净广告-kjoin失败,没有LOGNAME envvariables
在执行任务期间,LOGNAME,USER和HOME是由puppet专门取消的。 这是一个deviseselect,详细的票我链接到。
为了理智,我也设置了USER和HOME,不过我不确定他们是否需要net ads 。