【发布时间】:2020-02-20 13:47:36
【问题描述】:
我执行类似的 ldapsearch
ldapsearch -D "cn=ldapadm,dc=test,dc=com" -w ldappasswd -b "dc=test,dc=com" objectclass=*
而且效果很好。
现在我想用变量替换输入:
BASEDN="cn=ldapadm,dc=test,dc=com"
PASSWD="ldappasswd"
BINDDN="dc=test,dc=com"
ldapsearch -D "${BASEDN}" -w "${PASSWD}" -b "${BINDDN}" objectclass=*
但我得到了一个
ldap_bind: Invalid credentials (49)
错误... 这里有问题的部分是 PASSWD 替换。其他两个替换工作正常。
我在 VirtualBox 上使用 CentOS7。 密码不包含特殊字符。
我在这里错过了什么?
【问题讨论】:
-
它应该工作,从你所展示的。
ldappasswd是否包含$或"或其他魔术字符? -
不确定它是否能解决您的问题,但您应该引用您的星号,即
"objectclass=*"而不是objectclass=*。 -
您可以通过设置 xtrace 选项查看确切传递的内容:
set -x; ldap -D "${BASEDN}" -w "${PASSWD}" -b "${BINDDN}" objectclass=*,它将在变量扩展后将命令行输出到 stderr。请运行有效的命令(不带变量)和无效的命令,看看是否有区别。希望您会看到一个特殊字符是不同的,或者可能是变量开头或结尾的空格。 PS。您可以通过调用set +x来禁用 xtrace 选项 -
另外,将密码作为命令行参数传递是一种不好的做法,因为每个登录的用户都可以解析正在运行的进程的参数,包括其他用户的进程。您可以改用
-y passwdfile选项,并使用专用于打算运行 ldapsearch 命令的用户读取的文件。顺便说一句,它也可以解决您的问题。 -
感谢 vdavid。那成功了。你想发表你自己的答案,以便我可以给你学分吗?
标签: bash virtualbox centos7 openldap