如何从credentials.xml中解密Jenkins密码

66次阅读
没有评论

问题描述

在接管一个项目时发现许多Jenkins凭据中包含密码或密码短语字符串,他需要解密这些密码以便在项目中继续进行。然而,这些密码并未在任何地方进行记录。他检查了存储这些凭据的credentials.xml文件,但这些密码都不是明文,例如:

<passphrase>{AAAAAAAAAAAANzxft/rDzyt8mhxpn3O72dxvVqZksL5vBJ4jNKvAjAA=}</passphrase>

他想知道如何基于上面的字符串解密出原始密码。

解决方案

请注意以下操作可能涉及版本差异或存在一定风险,修改前请务必做好备份。

使用Jenkins的hudson.util.Secret.decrypt()函数解密

  1. 在Jenkins中,前往/script页面。
  2. 运行以下命令,将{XXX=}替换为你的加密密码:
println(hudson.util.Secret.decrypt("{XXX=}"))

或者使用以下方式:

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

这将输出解密后的明文密码。

如果需要反向操作,即将明文密码加密,可以运行以下命令:

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

请参考来源:tuxfight3r/jenkins-decrypt.groovy

使用第三方脚本或工具

另一种方法是使用脚本或工具来获取凭据并输出为明文。以下是一个示例脚本,可从Jenkins脚本控制台中运行,将所有凭据转换为明文输出:

com.cloudbees.plugins.credentials.SystemCredentialsProvider.getInstance().getCredentials().forEach {  
    it.properties.each { prop, val ->    
        if (prop == "secretBytes") {      
            println(prop + "=>\n" + new String(com.cloudbees.plugins.credentials.SecretBytes.fromString("${val}").getPlainData()) + "\n")    
        } else {      
            println(prop + ' = "' + val + '"')    
        }  
    }  
    println("-----------------------")
}

以上脚本会逐个遍历所有凭据,将其中的secretBytes属性进行解密并输出为明文。你可以将此脚本粘贴到Jenkins脚本控制台中执行。

使用其他脚本和工具

还有一些其他脚本和工具可以用于解密Jenkins凭据,例如:

你可以根据自己的需求选择适合你的脚本或工具进行操作。

更多详细信息,请查阅:Credentials storage in Jenkins

结论

解密Jenkins凭据的过程可以使用Jenkins内置的函数或者第三方脚本和工具来实现。请根据实际情况选择适合你的方法,并注意在操作前做好相关的备份和测试。

正文完