You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rundeck对接新LDAP持续报错误码49的排查求助

Rundeck对接新LDAP报LDAP error code 49 - Invalid Credentials排查方案

问题描述

尝试将Rundeck对接新LDAP服务(旧LDAP曾正常运行),始终收到报错:

LDAP: error code 49 - Invalid Credentials

已完成的排查动作:

  • 通过ldapsearch验证了证书与凭据的有效性
  • 将所需证书添加至/etc/rundeck/ssl/truststore及/home/rundeck/etc/rundeck/ssl/truststore
  • 执行keytool -list -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit查看JAVA密钥库中的证书

尝试的两种部署方式配置:

1. War包部署的jaas-ldap.conf配置

ldap {
    com.dtolabs.rundeck.jetty.jaas.JettyCachingLdapLoginModule sufficient
        debug="true"
        contextFactory="com.sun.jndi.ldap.LdapCtxFactory"
        providerUrl="ldaps://our.ldap.org:636"
        bindDN="uid=icrundeck,ou=accounts,ou=ims_service,o=ourorg,c=GB"
        bindPassword="xxxxxxxxx"
        authenticationMethod="simple"
        forceBindingLogin="true"
        userBaseDn="ou=users,ou=icrundeck,ou=ims_service,o=ourorg,c=GB"
        userRdnAttribute="uid"
        userIdAttribute="uid"
        userObjectClass="inetOrgPerson"
        roleBaseDn="ou=roles,ou=icrundeck,ou=ims_service,o=ourorg,c=GB"
        roleNameAttribute="cn"
        roleUsernameMemberAttribute="uid"
        roleMemberAttribute="member"
        roleObjectClass="posixGroup"
        supplementalRoles="Users"
        cacheDurationMillis="300000"
        reportStatistics="true";

    org.eclipse.jetty.jaas.spi.PropertyFileLoginModule required
        debug="true"
        file="/home/rundeck/server/config/realm.properties";
};

2. Docker容器部署的环境变量配置

environment:
      RUNDECK_LOGGING_STRATEGY: FILE
      RUNDECK_JAAS_MODULES_0: JettyCombinedLdapLoginModule
      RUNDECK_JAAS_LDAP_DEBUG: "true"
      RUNDECK_JAAS_LDAP_FLAG: sufficient
      RUNDECK_JAAS_LDAP_PROVIDERURL: ldaps://our.ldap.org:636
      RUNDECK_JAAS_LDAP_FORCEBINDINGLOGIN: false
      RUNDECK_JAAS_LDAP_BINDDN: uid=icrundeck,ou=accounts,ou=ims_service,o=ourorg,c=GB
      RUNDECK_JAAS_LDAP_BINDPASSWORD: xxxxxxxx
      RUNDECK_JAAS_LDAP_USERBASEDN: ou=users,ou=icrundeck,ou=ims_service,o=ourorg,c=GB
      RUNDECK_JAAS_LDAP_ROLEBASEDN: ou=roles,ou=icrundeck,ou=ims_service,o=ourorg,c=GB
      RUNDECK_JAAS_MODULES_1: PropertyFileLoginModule
      RUNDECK_JAAS_FILE_FLAG: sufficient

排查方案

一、精准定位LDAP Error 49的子原因

LDAP错误49包含多个细分码,对应不同问题:

  • 49/52e:凭据无效(用户名/密码错误)
  • 49/525:用户不存在
  • 49/530:用户未被允许登录(如时间限制)
  • 49/531:用户无法从当前主机登录
  • 49/532:密码过期
  • 49/533:用户被锁定

执行带详细输出的ldapsearch查看子码:

ldapsearch -v -H ldaps://our.ldap.org:636 -D "uid=icrundeck,ou=accounts,ou=ims_service,o=ourorg,c=GB" -w "xxxxxxxxx" -b "ou=users,ou=icrundeck,ou=ims_service,o=ourorg,c=GB" "(uid=testuser)"

二、WAR包部署额外排查

  1. 确认JAAS配置加载状态
    检查Rundeck启动参数是否指定了正确的配置文件:

    -Djava.security.auth.login.config=/path/to/jaas-ldap.conf
    

    查看Rundeck日志(默认路径/var/log/rundeck/rundeck.log),搜索JettyCachingLdapLoginModule关键词,确认debug日志是否输出绑定过程细节。

  2. 验证证书信任链完整性
    检查导入的证书是否包含完整信任链(不仅是根证书):

    keytool -v -list -keystore /etc/rundeck/ssl/truststore -alias your-ldap-cert
    

三、Docker部署排查及DEBUG开启

  1. 开启完整JAAS/LDAP调试日志
    当前RUNDECK_JAAS_LDAP_DEBUG参数不足以输出详细交互日志,需添加JVM调试参数:
    在Docker环境变量中新增:

    RUNDECK_JVM_OPTS: "-Djava.security.debug=jaas,ldap"
    

    或启动容器时直接指定:

    docker run -e RUNDECK_JVM_OPTS="-Djava.security.debug=jaas,ldap" ...
    

    之后查看容器日志即可获取完整的认证交互细节。

  2. 检查容器内证书信任状态
    进入容器验证证书是否正确导入:

    docker exec -it <rundeck-container-id> bash
    echo $JAVA_HOME
    keytool -list -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit
    

    若证书缺失,可通过挂载本地信任库到容器,或在Dockerfile中添加证书导入步骤。

  3. 容器内验证LDAP连接
    安装ldap-utils并执行连接测试:

    apt-get update && apt-get install -y ldap-utils
    ldapsearch -v -H ldaps://our.ldap.org:636 -D "uid=icrundeck,ou=accounts,ou=ims_service,o=ourorg,c=GB" -w "xxxxxxxxx" -b "ou=users,ou=icrundeck,ou=ims_service,o=ourorg,c=GB" "(uid=testuser)"
    

四、通用排查点

  • 统一forceBindingLogin参数:WAR包设置为true,Docker设置为false,尝试统一设为true强制用户凭据绑定。
  • 检查bindDN结构:确认新LDAP服务的OU结构是否与旧服务一致,bindDN是否正确。
  • 密码特殊字符转义:若bindPassword包含特殊字符,确认配置文件/环境变量中是否正确输入(Docker环境变量无需转义)。
  • 时间同步:确保Rundeck服务器(或容器)与LDAP服务器时间同步,时间差过大可能导致认证失败。

内容的提问来源于stack exchange,提问作者Gerald Hansen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 02:12:20