Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins 詹金斯:如何更改LDAP密码_Jenkins_Continuous Integration_Hudson - Fatal编程技术网

Jenkins 詹金斯:如何更改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安全性

我的机构要求我定期更改LDAP密码

过去,我可以执行以下步骤来更改密码:-

  • 在以下位置创建Base64编码密码:
  • 编辑
    /var/lib/jenkins/config.xml
    并更改
但是,Jenkins的最新版本不再使用
。相反,我看到的是

我不确定如何生成新的密码,因此我执行了以下操作:-

  • 首先备份
    /var/lib/jenkins/config.xml
  • 编辑
    /var/lib/jenkins/config.xml
    并将
    更改为
    false
  • 重新启动Jenkins服务
  • 去找詹金斯
  • 启用LDAP安全性
  • 输入新的LDAP密码
  • 保存它
  • 打开
    /var/lib/jenkins/config.xml
    并复制
  • 还原备份配置文件
  • 用新值替换
这是令人难以置信的复杂

有没有更直接的方法让我在将来维护LDAP密码更改


多谢

我也在尝试做同样的事情,这是一个简单的解决方案(从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")))));