[记录]从jenkins配置文件中解密密码

本文介绍如何从Jenkins的credentials.xml文件中解密忘记的密码。通过使用Jenkins管理员账号和Script Console功能,运行特定的Groovy代码实现密码的解密。

jenkins的credentials.xml文件中存储了很多账号,但是里面的密码都是经过加密处理的,密码格式都是下面这种

{AQAAABAAAAAgQI+cpXwSulM5zcFv14L5eODWtRDiP1HBCY/zg8H3kTDE4swuJ+j5DiVg251XDjq+}

最近有个账号的密码忘记了,但是很久之前在jenkins里面配置过的,所以想通过解密的方式去获取之前的密码。

网上找资料发现,jenkins的密码是使用hudson.util.Secret.fromString("明文密码").getEncryptedValue()加密的,而解密的话就需要使用hudson.util.Secret.fromString("{XXX=}").getPlainText()进行解密。

用jenkins的管理员账号登录,在系统管理列表中找到Script Console这个选项,
在这里插入图片描述
将下面语句粘贴到内容框中

println(hudson.util.Secret.fromString("{AQAAABAAAAAgQI+cpXwSulM5zcFv14L5eODWtRDiP1HBCY/zg8H3kTDE4swuJ+j5DiVg251XDjq+}").getPlainText())

点击运行按钮,解密后的明文密码就会打印出来

jenkins版本不同,可能使用的代码行也不同,还有可能是下面这种:

println(hudson.util.Secret.decrypt("{AQAAABAAAAAgQI+cpXwSulM5zcFv14L5eODWtRDiP1HBCY/zg8H3kTDE4swuJ+j5DiVg251XDjq+}"))

参考文档:https://qastack.cn/devops/2191/how-to-decrypt-jenkins-passwords-from-credentials-xml

### Jenkins 凭据迁移方法及注意事项 #### 方法概述 为了成功将旧 Jenkins 实例中的 `credentials.xml` 文件迁移到新的 Jenkins 实例中,可以采用以下策略: 1. **使用 Jenkins Credentials Decryptor 工具** 使用工具如 `jenkins-credentials-decryptor` 来解密原始 Jenkins 中的凭据信息。此工具能够解析并导出存储在 `$JENKINS_HOME/secrets/master.key` 和 `$JENKINS_HOME/credentials.xml` 中的数据[^1]。 2. **重新加密凭据至目标实例** 解密后的凭据需按照新 Jenkins 实例的安全配置重新加密。由于两套 Jenkins 的加密密钥不同,无法直接复制粘贴 `credentials.xml` 文件内容到新环境[^2]。 3. **利用 Jenkins CLI 或插件辅助迁移** 可借助 `jenkins-cli.jar` 或相关插件完成自动化迁移工作流。例如,通过脚本调用 API 创建或更新目标系统的凭据条目[^3]。 4. **手动导入方式作为备选方案** 如果上述自动化的手段不可行,则可考虑逐一手动录入重要敏感数据项;不过这种方式效率低下且容易出错,在大规模场景下不推荐使用。 #### 技术细节说明 以下是具体实施过程中涉及的一些关键技术点及其对应的操作指南: - **安装与运行 jenkins-credentials-decryptor** 下载项目源码后编译生成二进制文件或者直接获取预构建版本执行如下命令来查看帮助文档: ```bash ./jenkins-credentials-decryptor --help ``` - **提取原生明文密码字符串** 假设已知路径指向正确的 Jenkins 主目录结构,那么可以通过下面这样的指令序列获得特定 ID 所关联的秘密值: ```bash ./jenkins-credentials-decryptor dump -f /path/to/jenkins_home/ ``` 此处会打印所有可用记录列表连同其对应的未加工形式展示出来以便后续处理[^4]。 - **编写转换逻辑适配器程序** 鉴于两个平台间可能存在字段命名差异等问题,因此有必要开发一段自定义代码片段负责映射关系建立以及格式调整等工作任务。比如 Python 脚本样例如下所示: ```python import json def transform_credential(source_cred): transformed = { 'username': source_cred['userName'], 'password': source_cred['password'] } return transformed with open('decrypted_credentials.json', 'r') as f: creds = json.load(f) new_format_creds = list(map(transform_credential, creds)) with open('new_formatted_credentials.json', 'w') as nf: json.dump(new_format_creds, nf, indent=2) ``` #### 注意事项提醒 当从事此类跨系统资源转移活动期间应当特别留意以下几个方面以防潜在风险发生: - 数据一致性校验:确保每一步骤完成后都进行了充分验证防止遗漏丢失情况; - 安全防护措施落实到位:整个流程务必遵循最小权限原则操作,并妥善保管临时产生的中间产物以免泄露机密资料; - 备份机制启用:正式动作之前做好完整的备份副本存档以应对意外状况恢复之需。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值