使用变量 bash 自动化 ldapsearch

Automating ldapsearch with bash using variables

我像这样执行 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。 密码不包含特殊字符。

我在这里错过了什么?

set -x; ldapsearch -D "${BASEDN}" -w "${PASSWD}" -b "${BINDDN}" objectclass=*

暴露了问题。我从文件中加载了值,每个字符串的末尾都有一个不可见的换行符。

输出:

ldapsearch -D cn=ldapadm,dc=test,dc=com\r -w ldappasswd\r -b dc=test,dc=com\r objectclass=*

我删除了 \r 调用

PASSWD=`echo "${value_from_file}"| sed 's/\r//g'`

它奏效了。

你可以使用 echo -n "这里是密码" > password_file

或者,设置为环境变量

读取-s“密码” read -s -p "password:" 密码 密码:在此输入密码 echo -n $密码| ldapsearch -LLL -D cn=whatever,o=whateverelse -y /dev/stdin