我正在修改Jenkins作业的xml。有一个字段是密码。当我得到xml时,它就是原始密码,现在有一个哈希值。
我需要知道如何从原始密码值创建此哈希。
<scm class="com.deluan.jenkins.plugins.rtc.JazzSCM">
<username>user</username>
<password>zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=</password>
</scm>
我一直在阅读Jenkins source code,我认为HudsonPrivateSecurityRealm.java是参与的,但我不确定salt参数。
PS:这不适用于Jenkins密码是针对一个插件,在作业配置中它有一个密码字段。
答案 0 :(得分:35)
实际上,它不是哈希,而是加密密码。我想加密密钥存储在主节点中。实际上,您可以通过在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())
计算机上加密的密码只能在该特定计算机上解密,因为密钥是随机生成的,显然在不同的计算机上密钥不同。
答案 1 :(得分:17)
另一种可能性是通过Jenkins Groovy控制台执行Groovy脚本(您可以通过 JENKINS_URL / script 访问它):
println(hudson.util.Secret.decrypt("zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk="))
使用python可以实现其他一些方法:
https://github.com/tweksteen/jenkins-decrypt
https://gist.github.com/menski/8f9980999ed43246b9b2
答案 2 :(得分:6)
Jenkins使用AES-128-ECB进行所有加密。它基本上使用master.key
文件来加密存储在hudson.util.Secret
文件中的密钥。然后,此密钥用于加密credentials.xml
中的密码。
因此,要解密Jenkins密码,您基本上需要访问hudson.util.Secret
和master.key
个文件。您可以通过查看hudson.utils.Secret
类及其fromString
方法来确切了解Jenkins如何加密密码。基本上,在使用KEY加密之前,密码与魔术连接。
有关详细信息,请查看:Credentials storage in Jenkins。
要解密密码,请按以下步骤操作:
/script
页面。运行以下命令:
println(hudson.util.Secret.decrypt("{XXX=}"))
或:
println(hudson.util.Secret.fromString("{XXX=}").getPlainText())
其中{XXX=}
是您的加密密码。这将打印普通密码。
相反,运行:
println(hudson.util.Secret.fromString("some_text").getEncryptedValue())
来源:gist at tuxfight3r/jenkins-decrypt.groovy
。
或者检查以下脚本:tweksteen/jenkins-decrypt
,
menski/jenkins-decrypt.py