Ban*_*jer 3 linux centos kerberos samba puppet
我有以下exec
将 Linux (CentOS 6) 主机加入 Active Directory 域的内容。在 bash 终端以 root 身份运行时,它运行成功并且主机正确加入 AD 域。
但是,在 puppet 中运行时,该net ads join
命令失败并显示:
无法加入域:无法为机器帐户设置密码 (NT_STATUS_ACCESS_DENIED)
这是执行
exec { 'adjoin':
command => "kinit adjoin@AD.EXAMPLE.COM -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,
}
Run Code Online (Sandbox Code Playgroud)
我试过使用和不使用provider
anduser
参数。
事实证明,我必须使用environment
exec 中的参数显式设置一些环境变量,特别是LOGNAME
:
exec { 'adjoin':
command => "kinit adjoin@AD.EXAMPLE.COM -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',
],
}
Run Code Online (Sandbox Code Playgroud)
这有两个原因:
LOGNAME、USER 和 HOME在 exec 运行期间由 puppet 专门取消设置。这是一个设计选择,在我链接到的票证中有详细说明。
为了理智起见,我还设置了 USER 和 HOME,但我不确定net ads
.
归档时间: |
|
查看次数: |
3189 次 |
最近记录: |