问题描述
在接管一个项目时发现许多Jenkins凭据中包含密码或密码短语字符串,他需要解密这些密码以便在项目中继续进行。然而,这些密码并未在任何地方进行记录。他检查了存储这些凭据的credentials.xml
文件,但这些密码都不是明文,例如:
<passphrase>{AAAAAAAAAAAANzxft/rDzyt8mhxpn3O72dxvVqZksL5vBJ4jNKvAjAA=}</passphrase>
他想知道如何基于上面的字符串解密出原始密码。
解决方案
请注意以下操作可能涉及版本差异或存在一定风险,修改前请务必做好备份。
使用Jenkins的hudson.util.Secret.decrypt()
函数解密
- 在Jenkins中,前往
/script
页面。 - 运行以下命令,将
{XXX=}
替换为你的加密密码:
println(hudson.util.Secret.decrypt("{XXX=}"))
或者使用以下方式:
println(hudson.util.Secret.fromString("{XXX=}").getPlainText())
这将输出解密后的明文密码。
如果需要反向操作,即将明文密码加密,可以运行以下命令:
println(hudson.util.Secret.fromString("some_text").getEncryptedValue())
使用第三方脚本或工具
另一种方法是使用脚本或工具来获取凭据并输出为明文。以下是一个示例脚本,可从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内置的函数或者第三方脚本和工具来实现。请根据实际情况选择适合你的方法,并注意在操作前做好相关的备份和测试。
正文完