好吧,伙计们,我整天都在为这个问题绞尽脑汁,却一无所获。我试图在脚本中对 OpenLDAP 运行 ldapmodify 来更新一系列主机的几个属性。无论我做什么,我都会得到“服务器不愿意执行...没有全局上级知识。”
这是我的代码,其中插入了虚拟值。有人能看出我做错了什么吗?
for sys in <system names>; do
ldapmodify -x -c -h localhost -D uid=name,dc=example,dc=com -w ${password} <<EOF
dn: hostname=${sys},ou=computers,location=code,dc=example,dc=com
changetype: modify
replace: ip
ip: new.host.ip.address
-
replace: printer
printer: new.printer.ip.address
EOF
done
该 DN 与 ldapsearch 提供的 DN 完全匹配,因此我看不出这怎么可能是问题所在。不过,就像我说的,我就是看不出问题所在,所以欢迎提出任何建议。
另外,slapd.conf 中的后缀是 dc=example,dc=com。
答案1
令人吃惊的是,这些小事情竟然会给你带来如此大的困扰。由于这是在脚本中,我缩进了命令部分以符合编码惯例。显然,ldapmodify 将空格解释为命令/数据的一部分,并感到困惑。我将其重新格式化为如下所示,现在它可以正常工作了:
for sys in <system names>; do
ldapmodify -x -c -h localhost -D uid=name,dc=example,dc=com -w ${password} <<EOF
dn: hostname=${sys},ou=computers,location=code,dc=example,dc=com
changetype: modify
replace: ip
ip: new.host.ip.address
-
replace: printer
printer: new.printer.ip.address
EOF
done