Jenkins上集成多个LDAP服务器认证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins上集成多个LDAP服务器认证相关的知识,希望对你有一定的参考价值。

参考技术A

1. 安装LDAP插件
[ https://plugins.jenkins.io/ldap/]
2. 添加一个Jenkins LDAP配置
Server :这里填写LDAP server的地址即可
root DN : 这里填写你需要的base路径, 如果这里不填则勾选 Allow blank rootDN ,但是user search base和group search base则不能为空,否则会报找不到object的错误
User search base :可以不填,则会查找改root DN下的所有用户
User search filter :一般包含三种, uid=0; cn=0; sAMAccountName=0, 如果不确定LDAP Server怎样设置的,则可以依次尝试
Group search base : 可以不填,则会查找改root DN下的所有组
Manager DN :认证查询该LDAP服务器的用户DN,包括该用户的完整CN, OU, DC
Manager Password : 上述用户的密码
其他可以保持默认配置
3. 添加另外一个LDAP Server 的配置
点击 Add Server , 可以按照上述配置继续配置,这两个可以是不同的配置
配置多个ldap时建议勾选上 Ignore if unavailable ,这样如果其中一个ldap server不可用,会尝试使用下一些个ldap server。
4. 配置过程中遇到的问题
4.1 错误日志:
User lookup: failed for user "your_username" LdapCallback;null; nested exception is javax.naming.PartialResultException [Root exception is javax.naming.CommunicationException: dc1.dc2.dc3:389 [Root exception is java.net.UnknownHostException: dc1.dc2.dc3]] LDAP Group lookup: could not verify.
其中your_username是你试图登陆的一个AD用户; dc1.dc2.dc3是你设置的DC=dc1, DC=dc2, DC=dc3,我这里出现了该问题是因为LDAP server我提供的是一个IP地址
原因:该问题是找不到 dc1.dc2.dc3该域名,请在AD上配置域名解析 your_LDAP_IP 到dc1.dc2.dc3或者临时在系统的/etc/hosts文件中添加该域名解析

4.2 错误日志:
LdapCallback;LDAP response read timed out, timeout used:60000ms.; nested exception is javax.naming.NamingException: LDAP response read timed out, timeout used:60000ms.; remaining name \'\'
这个问题是因为connection pool的连接有问题,解决方案是在Jenkins的LDAP配置中添加一个环境变量 com.sun.jndi.ldap.connect.pool 设为 false , 具体可参考:[ https://guv.cloud/post/jenkins-and-ldap/]

4.3 我使用的是docker 容器跑的Jenkins,有一些有用的命令
docker logs --following container_name/ID 查看日志
docker exec --user root -it container_name/ID /bin/bash 以root用户登陆该容器

4.4 如果登陆速度较慢,可以enable cache来减少查询LDAP server的负载

LDAP 身份验证不适用于 Jenkins

【中文标题】LDAP 身份验证不适用于 Jenkins【英文标题】:LDAP authentication not working with Jenkins 【发布时间】:2017-10-10 01:18:59 【问题描述】:

请帮我解决以下问题:

我正在尝试在我的 Jenkins 工具中配置 LDAP 身份验证。我已经在 J​​enkins 上为 LDAP 身份验证完成了以下设置,但我仍然无法登录。

服务器:ldaps://rootdc1.myweb.com:636

根 DN : DC=MYWEB,DC=COM

用户搜索库:DC=MYWEB,DC=COM

用户搜索过滤器:sAMAccountName=0

群组搜索库:DC=MYWEB,DC=COM

经理 DN:CN=rhunt,OU=ApplicationUsers,DC=MYWEB,DC=COM

以下是尝试登录时出现的错误:

登录信息无效。请再试一次。 再试一次 如果您是系统管理员并怀疑这是配置问题,请参阅服务器控制台输出了解更多详细信息。

提前致谢!

【问题讨论】:

你看过服务器控制台输出了吗?它是否提供了有关登录问题的更多详细信息? 是的,它在控制台输出中提供有关登录身份验证的信息。以下是错误代码: javax.naming.NameNotFoundException:[LDAP:错误代码 32 - 0000208D:NameErr:DSID-0310020A,问题 2001(NO_OBJECT 错误信息表明您的LDAP目录中没有“CN=rhunt,OU=ApplicationUsers,DC=MYWEB,DC=COM”这样的DN。您能否展开 DIT 并检查 CN=rhunt 的层次结构和属性是否正确?您可以使用 Apache Directory Studio 等 LDAP 浏览器进行连接。 在 Jenkins 配置全局安全中,我们只需要传递以下参数即可通过 LDAP 身份验证成功连接和登录: 服务器:ldaps://rootdc1.myweb.com:636 根 DN:DC= DC= MYWEB,DC=COM 用户搜索过滤器:sAMAccountName=0 管理员 DN:CN=rhunt,OU=ApplicationUsers,DC=MYWEB,DC=COM 管理员密码:******** 【参考方案1】:

在 Jenkins 配置全局安全性中,我们只需将参数传递给以下选项卡即可通过 LDAP 身份验证成功连接,其余字段留空:

服务器:ldaps://rootdc1.myweb.com:636

根 DN:DC= DC=MYWEB,DC=COM

用户搜索过滤器:sAMAccountName=0

经理 DN:CN=rhunt,OU=ApplicationUsers,DC=MYWEB,DC=COM

管理员密码:********

【讨论】:

这有帮助!我将用户搜索过滤器从 uid 切换到 sAMAccountName=0 并且它起作用了:)【参考方案2】:

在JenkinsLDAP Plugin中,有一个方法normalizeUserSearchBase

return userSearchBase + "," + rootDN; 连接 userSearchBase 和 rootDN。

因此,您应该在User search base 字段中填写从根DN 中删除的值。在你的情况下留空。

【讨论】:

以上是关于Jenkins上集成多个LDAP服务器认证的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab加入LDAP认证

Jenkins 实现 LDAP认证

jenkins 使用LDAP认证

Centos7.5部署最新稳定版jenkins并配置ldap认证

LDAP的用户需求

python 连接使用LDAP认证的hive