我们有一个 shell 脚本,它运行 perl 程序来连接到 LDAP 服务器并进行输入。
这是唯一使用 ldap 的脚本。此服务器托管所有批处理相关文件并在 autosys 上运行批处理作业。因此我们不希望在此服务器上进行 LDAP 身份验证。我们对 ldap 的唯一用途是连接到 LDAP 服务器并更新条目。其他一些 Web 应用程序用户 LDAP 身份验证现在与我们无关。
现在,我们正在将批处理服务器从 Solairs 10 移至 RHEL 6.6。旧机器有 SUNWlldap,我们正在尝试在新 Linux 机器上配置 OpenLDAP 客户端。LDAP 服务器是 RHEL 5.11,正在使用 openldap。
我们已经在新机器上安装了以下 rpm。
nss-pam-ldapd-0.7.5-18.2.el6_4.x86_64,
openldap-2.4.39-8.el6.x86_64,
pam_ldap-185-11.el6.x86_64,
apr-util-ldap-1.3.9-3.el6_0.1.x86_64,
perl-Mozilla-LDAP-1.5.3-4.el6.x86_64,
compat-openldap-2.3.43-2.el6.x86_64,
perl-LDAP-0.40-1.el6.noarch.
按照以下链接配置客户端:
http://unixadminschool.com/blog/2013/03/rhel-6-implementation-of-ldap-authentication
我遗漏了证书部分。我在旧服务器中搜索过证书,但找不到。我不明白如何在不使用证书的情况下进行连接,也不确定我们是否需要证书来实现我们的目的。
下面是使用 ldap 的脚本:
$oid001i.pl $input_file $LDAP_Server $LDAP_Port $LDAP_ID $LDAP_PWD $LDAP_UserBaseDN
所有这些变量都来自另一个文件。以下是文件的内容
LDAP_Server=servername.company.com
LDAP_Port=1389
LDAP_ID="cn=username,cn=users,dc=company,dc=com"
LDAP_PWD="password"
LDAP_UserBaseDN="cn=users,dc=company,dc=com"
用于绑定的 Perl 代码oid001i.pl
:
$ldap = Net::LDAP->new( $LDAP_Server, port=>$LDAP_Port, version => 3);
$mesg = $ldap->bind( $LDAP_ID,password => $LDAP_PWD);
$SearchFor="cn=$cn";
#Perform Search
$mesg = $ldap->search( base => $LDAP_UserBaseDN, filter => $SearchFor,callback => \&ParseEntry,);
$mesg = $ldap->unbind; # take down session
当我执行时
$perl oid001i.pl input_file server.company.com port "cn=username,cn=users,dc=company,dc=com" password "cn=users,dc=company,dc=com"
我们得到这个错误:
Can't call method "bind" on an undefined value at oid001i.pl line 21, <IN> line 1.
我运行此命令来检查连接并出现错误:
$ldapsearch -h servername.company.com -p 1389 -LLLx -b 'cn=users,dc=comapany,dc=com' -s base
Cannot connect to the LDAP server
我是不是漏掉了什么?证书是否必须连接到 LDAP 服务器?在 LDAP 服务器端还有其他事情要做吗?如能得到任何帮助,我们将不胜感激?