我给 Jenkins 加了一个 SSH 凭证。
不幸的是,我忘记了 SSH 密码,现在想从位于 ${JENKINS_HOME}/credentials.xml的 Jenkins 凭证归档中获取它。
${JENKINS_HOME}/credentials.xml
该 XML 文档似乎有加密在 XML 标记 <passphrase>或 <password>中的凭据。
<passphrase>
<password>
如何检索明文密码短语?
是的,你可以拿回来。它是 AES 加密的,在搜索密码之前您必须做一些事情。看看 秘密类。
但是你看,现在已经有一些剧本了:
Https://github.com/tweksteen/jenkins-decrypt Https://gist.github.com/menski/8f9980999ed43246b9b2
更多的信息和使用 java 的方法,你可以在这里找到:
詹金斯用的是什么密码加密?
通过访问 http(s)://${JENKINS_ADDRESS}/script打开 Jenkins 安装的脚本控制台。
http(s)://${JENKINS_ADDRESS}/script
在那里,执行以下 Groovy 脚本:
println( hudson.util.Secret.decrypt("${ENCRYPTED_PASSPHRASE_OR_PASSWORD}") )
其中 ${ENCRYPTED_PASSPHRASE_OR_PASSWORD}是要查找的 <password>或 <passphrase>XML 元素的加密内容。
${ENCRYPTED_PASSPHRASE_OR_PASSWORD}
如果您正在使用 Jenkins 凭证绑定插件,您可以让它将您的密码写入一个文件。你不能只是输出到控制台,因为插件会把它输出出去。
我知道这很古老,但是... 对于管道来说非常简单。下面是一个将凭据打印到控制台的示例管道:
node { def creds stage('Sandbox') { withCredentials([usernamePassword(credentialsId: 'my-creds', passwordVariable: 'C_PASS', usernameVariable: 'C_USER')]) { creds = "\nUser: ${C_USER}\nPassword: ${C_PASS}\n" } println creds } }
执行此管道将在控制台中产生以下内容:
Started by user First Last (username) Running in Durability level: MAX_SURVIVABILITY [Pipeline] node Running on Jenkins in /jenkins/workspace/sandbox [Pipeline] { [Pipeline] stage [Pipeline] { (Sandbox) [Pipeline] withCredentials [Pipeline] { [Pipeline] } [Pipeline] // withCredentials [Pipeline] echo User: testuser Password: Ab37%ahc*z [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS
这里的技巧是凭证只在 withCredentials块内被掩盖。如果将它们分配给块外定义的变量,然后在块外打印该变量,则不会应用屏蔽。这被报告为一个 bug,但是没有对它进行任何操作。
withCredentials
首先,您需要获得加密的值,该值可以方便地放置在您感兴趣的凭据项的 password 字段的 value属性中。导航到 Jenkins UI 中的凭据项,单击 password 字段上的 InspectElement,并复制其 value属性(类似于 {AQAABAAAa6VBbyzg5AWMW2RnfaBaj46})
value
{AQAABAAAa6VBbyzg5AWMW2RnfaBaj46}
然后,转到 JENKINS_URL/script并执行 println( hudson.util.Secret.decrypt("{AQAABAAAa6VBbyzg5AWMW2RnfaBaj46}") ); 解密的密码出现在输入字段下面
JENKINS_URL/script
println( hudson.util.Secret.decrypt("{AQAABAAAa6VBbyzg5AWMW2RnfaBaj46}") )
转到 管理 Jenkins-> 脚本控制台并运行以下代码:
import java.nio.charset.StandardCharsets; def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials( com.cloudbees.plugins.credentials.Credentials.class ) for (c in creds) { println(c.id) if (c.properties.description) { println(" description: " + c.description) } if (c.properties.username) { println(" username: " + c.username) } if (c.properties.password) { println(" password: " + c.password) } if (c.properties.passphrase) { println(" passphrase: " + c.passphrase) } if (c.properties.secret) { println(" secret: " + c.secret) } if (c.properties.secretBytes) { println(" secretBytes: ") println("\n" + new String(c.secretBytes.getPlainData(), StandardCharsets.UTF_8)) println("") } if (c.properties.privateKeySource) { println(" privateKey: " + c.getPrivateKey()) } if (c.properties.apiToken) { println(" apiToken: " + c.apiToken) } if (c.properties.token) { println(" token: " + c.token) } println("") }