ldapsearch 密码文件格式

ldapsearch 密码文件格式

我该如何ldapsearch使用该-y <password file>选项传递密码?
如果我以纯文本形式将密码写入密码文件中,则会收到此错误:

ldap_bind: Invalid credentials (49)
    additional info: 80090308: LdapErr: DSID-0C0903AA, comment: AcceptSecurityContext error, data 52e, v1772

如果我使用该选项,也会发生同样的情况-w <password>

编辑
我正在运行的命令是

ldapsearch -x -D <my dn> -y .pass.txt -h server.x.x -b "dc=x,dc=y" "cn=*"

该文件.pass.txt以纯文本形式包含我的密码。DN 和密码均正确。如果我使用该-W选项运行命令并在提示符下输入密码,则命令将成功运行,但我想以某种方式存储密码以制作脚本。

答案1

请记住,ldapsearch 将使用文件的全部内容作为密码 - 这意味着它将包含终止换行符(如果存在)。要验证这是否确实是您的问题,请尝试创建一个没有换行符的文件:

echo -n ThisIsaBadPassword > .pass.txt

更新:包括‘-n’)

答案2

假设它是换行符/回车符,请尝试以下操作:

cat .pass.txt | tr -d '\n\r' > .pass2.txt

然后使用 .pass2.txt 文件。您可以随时使用来检查换行符和回车符cat -vE,它们将分别显示为 $ 和 ^M。

您可能也可以-y <(cat .pass.txt | tr -d '\n\r')直接在 ldapsearch 命令中执行此操作。

答案3

结合@Brian Showalter、Kyle Brandt 和其他人的回答,理想的解决方案是:

read -s LDAPPASS
echo -n "$LDAPPAS"" | ldapsearch -x -D $MYDN -y /dev/stdin -h $MYSERVER -b $MYBASE "cn=*"

LDAPPASS 位于用户环境中,在现代 Linux 上已经足够安全。回显是内部的,在进程表中永远不可见,这意味着 ldapsearch 通过安全通道获取信息,不会泄露到磁盘上的任何地方(当然,除非您的进程在执行过程中被交换)。

答案4

无需将密码转储到实际文件中。只需使用 -n 标志回显它以防止换行,然后从 STDIN 文件描述符 (/dev/fd/0) 中读取它,如下所示:

echo -n 'mypassword' | ldapsearch -x -D <my dn> -y /dev/fd/0 -h server.x.x -b "dc=x,dc=y" "cn=*"

相关内容