Jenkins使用什么密码加密?

我正在修改Jenkins作业的xml。 有一个字段是密码。 当我得到xml时,它是原始密码,现在有一个哈希。

我需要知道如何从原始密码值创建此哈希。

 user zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=  

我一直在阅读Jenkins 源代码 ,我认为HudsonPrivateSecurityRealm.java类涉及但我不确定salt参数。

PS:这不适用于Jenkins密码是针对一个插件,在作业配置中它有一个密码字段。

实际上,它不是哈希,而是加密密码。 我想加密密钥存储在主节点中。 实际上,您可以通过在master的脚本控制台上执行以下groovy脚本来解密密码

 import hudson.util.Secret def secret = Secret.fromString("zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=") println(secret.getPlainText()) 

如果你想加密密码,那么

 import hudson.util.Secret def secret = Secret.fromString("your password") println(secret.getEncryptedValue()) 

在计算机上加密的密码只能在该特定计算机上解密,因为密钥是随机生成的,显然在不同的机器上密钥是不同的。

查看core / src / main / java / hudson / util / Secret.java以获取更多详细信息

另一种可能性是通过Jenkins Groovy控制台执行Groovy脚本(您可以通过JENKINS_URL /脚本访问它):

 println(hudson.util.Secret.decrypt("zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=")) 

使用python可以实现其他一些方法:

https://github.com/tweksteen/jenkins-decrypt
https://gist.github.com/menski/8f9980999ed43246b9b2

Jenkins使用AES-128-ECB进行所有加密。 它基本上使用master.key文件来加密存储在hudson.util.Secret文件中的密钥。 然后,此密钥用于加密credentials.xml的密码。

因此,要解密Jenkins密码,您基本上需要访问hudson.util.Secretmaster.key文件。 您可以通过查看hudson.utils.Secret类及其fromString方法来确切了解Jenkins如何加密密码。 基本上,密码在使用KEY加密之前与魔术连接。

有关更多详细信息,请查看: Jenkins中的凭据存储 。


要解密密码,请按照下列步骤操作:

  1. 在Jenkins中以管理员身份登录时,请转到: /script page。
  2. 运行以下命令:

     println(hudson.util.Secret.decrypt("{XXX=}")) 

    要么:

     println(hudson.util.Secret.fromString("{XXX=}").getPlainText()) 

    其中{XXX=}是您的加密密码。 这将打印普通密码。

    要做相反的事情,请运行:

     println(hudson.util.Secret.fromString("some_text").getEncryptedValue()) 

资料来源: tuxfight3r/jenkins-decrypt.groovy


或者检查以下脚本: tweksteen/jenkins-decryptmenski/jenkins-decrypt.py