【问题标题】:bash ldap search - variable as filterbash ldap 搜索 - 变量作为过滤器
【发布时间】:2016-12-06 22:23:14
【问题描述】:

我在争论一些我认为很简单的事情......

我想从 ldap 中查找用户管理员,然后获取管理员的电子邮件和 sam 姓名。

我希望能够像这样从 ldap 获取经理的 cn:

manager=$(/usr/bin/ldapsearch -LLL -H ldap://company.ads -x -D admin@company.ads -w password -b ou=employees,dc=company,dc=ads sAMAccountName=employee1 | grep "manager:" | awk '{gsub("manager: ", "");print}' | awk 'BEGIN {FS=","}; {print $1, $2 }' )

这给了我这样的cn:

CN=manager,\ Surname

现在当我像这样运行另一个查询时:

/usr/bin/ldapsearch -LLL -H ldap://company.ads -x -D admin@company.ads -w password -b ou=employees,dc=company,dc=ads $manager 

我得到错误的搜索过滤器(-7)回显命令副本,粘贴运行它我得到记录......

我已经尝试了很多变体,有人能看出我缺少什么吗?

谢谢。

【问题讨论】:

    标签: bash active-directory ldap ldap-query


    【解决方案1】:

    由于$manager中有空格,所以需要用引号引起来,防止被拆分成多个参数。

    /usr/bin/ldapsearch -LLL -H ldap://company.ads -x -D admin@company.ads -w password -b ou=employees,dc=company,dc=ads "$manager"
    

    一般来说,最好总是引用您的变量,除非您特别希望将其拆分为单词。

    您还需要从 LDAP 条目中删除反斜杠 \。反斜杠用于转义脚本中的文字空格,不应在数据中使用它们,因为在扩展变量时不会对其进行处理。

    【讨论】:

    • 我添加了引号,但仍然得到相同的结果,错误的搜索过滤器,回显并再次通过它可以工作。一定和这个有关,某处逃逸不好。
    • $manager 真的包含反斜杠吗?扩展变量时不处理反斜杠,因此将按字面意思作为过滤器发送。
    • 是的,它在变量中,当我获得 CN 时它从广告返回,所以看来我的问题是 \?
    • 如果您以交互方式键入manager,\ Surname,则反斜杠会转义空格,因此它是单个参数。当值在变量中时,不需要转义。我不明白为什么广告会这样返回它。
    • 您可以删除awk 脚本中的反斜杠。顺便说一句,您不需要使用两个awk 脚​​本,您可以在与print $1, $2 相同的脚本中执行gsub()