Jenkins 詹金斯:如何更改LDAP密码
我的机构要求我定期更改LDAP密码 过去,我可以执行以下步骤来更改密码:-Jenkins 詹金斯:如何更改LDAP密码,jenkins,continuous-integration,hudson,Jenkins,Continuous Integration,Hudson,我的机构要求我定期更改LDAP密码 过去,我可以执行以下步骤来更改密码:- 在以下位置创建Base64编码密码: 编辑/var/lib/jenkins/config.xml并更改 但是,Jenkins的最新版本不再使用。相反,我看到的是 我不确定如何生成新的密码,因此我执行了以下操作:- 首先备份/var/lib/jenkins/config.xml 编辑/var/lib/jenkins/config.xml并将更改为false 重新启动Jenkins服务 去找詹金斯 启用LDAP安全性
- 在以下位置创建Base64编码密码:
- 编辑
并更改/var/lib/jenkins/config.xml
。相反,我看到的是
我不确定如何生成新的密码,因此我执行了以下操作:-
- 首先备份
/var/lib/jenkins/config.xml
- 编辑
并将/var/lib/jenkins/config.xml
更改为false
- 重新启动Jenkins服务
- 去找詹金斯
- 启用LDAP安全性
- 输入新的LDAP密码
- 保存它
- 打开
并复制/var/lib/jenkins/config.xml
- 还原备份配置文件
- 用新值替换
多谢 我也在尝试做同样的事情,这是一个简单的解决方案(从Jenkins控制台使用): 解码更简单:
println(hudson.util.Secret.decrypt(HashFromConfigXmlHere))代码>您仍然可以使用
使用生成新的编码密码
perl-e’使用MIME::Base64;打印encode_base64(“您的新密码”);'
在config.xml中,查找//。更改为(之前和之后),并将#1的编码放在它们之间。保存文件
重新启动詹金斯
登录并使用UI将LDAP Manager密码重置为相同的yourNewPassword。config.xml现在应该返回到
如果你是偏执狂(和我一样),请重新启动jenkins以使用新修改的config.xml
我尝试了@alkuzad提供的解决方案,效果很好。只是为了澄清,当LDAP用户密码过期时,您不能使用Jenkins web控制台。所以我做了如下工作(我在Jenkins中有groovy脚本插件。我还为匿名用户提供了运行脚本访问权限——这不是一个好主意,但这是我最初发现的解决这个反复出现的问题的方法)
下载jenkins-cli.jar
将上述代码放入GroovyPasswordClass.txt中(不要忘记使用新密码代替代码中的值\u to\u加密)
启动jenkins服务器(要求jenkins运行)
从命令提示符运行下面的命令
java-jar-jenkins-cli.jar-s groovy GroovyPasswordClass.txt
这将打印加密密码
更好的选择
后来,我发现若目录服务提供者是MS Active directory,那个么进行身份验证的方法更好。在这种情况下,我使用Active Directory插件进行身份验证,而不是LDAP插件。我发现这个更好,因为
1) 使用Active directory插件而不是基于通用LDAP协议的插件时,响应速度更快
2) Active Directory插件使用启动Jenkins服务的用户数据,无需在Jenkins中配置任何用户帐户。所以,您永远不会出现Jenkins登录不工作的情况,因为为ldap配置的用户密码已过期
希望这能帮助其他试图解决此问题的人。以上解决方案都不适用于Jenkins(2.78)的更新版本。工作原理是在没有任何加密的情况下放入managerPasswordSecret。一旦我运行Jenkins,密码就为我加密了。手动编辑config.xml文件
如果您的Jenkins使用了一组标签,请将新的纯文本密码放入其中,Jenkins将读取该密码。Jenkins启动后,转到配置系统>配置全局安全页面并单击保存。这将用加密版本更新该字段。当前最简单和最快的解决方案(对我来说刚刚有效)来自Cloudbees:只需在config.xml的password字段中以纯文本(未加密)形式输入新密码,Jenkins就会正确读取该密码。启动Jenkins并重新保存管理Jenkins->配置全局安全页面后
正如@roman zenka在上文中指出的,此解决方案不再有效,但您可以将未加密的密码放入managerPasswordSecret中,并在重新启动Jenkins时为您加密。
import com.trilead.ssh2.crypto.Base64;
import javax.crypto.Cipher;
import jenkins.security.CryptoConfidentialKey;
import hudson.util.Secret;
CryptoConfidentialKey KEY = new CryptoConfidentialKey(Secret.class.getName());
Cipher cipher = KEY.encrypt();
String MAGIC = "::::MAGIC::::";
String VALUE_TO_ENCRYPT = "";
println(new String(Base64.encode(cipher.doFinal((VALUE_TO_ENCRYPT + MAGIC).getBytes("UTF-8")))));