我已将SSH凭据添加到Jenkins。不幸的是,我忘记了SSH密码,现在想从Jenkins的凭据存档中获得它,该存档位于${JENKINS_HOME}/credentials.xml。该XML文档似乎具有在XML标记<passphrase>或<password>中加密的凭据。如何检索纯文本密码短语?
${JENKINS_HOME}/credentials.xml
<passphrase>
<password>
wswtfjt71#
通过访问http(s)://${JENKINS_ADDRESS}/script打开Jenkins安装的脚本控制台。在此处执行以下Groovy脚本:
http(s)://${JENKINS_ADDRESS}/script
println( hudson.util.Secret.decrypt("${ENCRYPTED_PASSPHRASE_OR_PASSWORD}") )
其中${ENCRYPTED_PASSPHRASE_OR_PASSWORD}是您要查找的<password>或<passphrase> XML元素的加密内容。
${ENCRYPTED_PASSPHRASE_OR_PASSWORD}
juzqafwq2#
首先,您需要获取加密值,该值可以方便地放置在您感兴趣的凭据项的password字段的value属性中。导航到Jenkins UI中的凭据项,单击password字段上的Inspect Element,然后复制其value属性(类似于{AQAABAAAa6VBbyzg5AWMW2RnfaBaj46}然后,转到JENKINS_URL/script并执行println( hudson.util.Secret.decrypt("{AQAABAAAa6VBbyzg5AWMW2RnfaBaj46}") );解密后的密码将显示在输入字段下
value
{AQAABAAAa6VBbyzg5AWMW2RnfaBaj46}
JENKINS_URL/script
println( hudson.util.Secret.decrypt("{AQAABAAAa6VBbyzg5AWMW2RnfaBaj46}") )
o2rvlv0m3#
我知道这是旧的,但是...使用管道非常简单。下面是一个将凭据打印到控制台的示例管道:
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
zc0qhyus4#
如果你使用的是Jenkins Credential Binding Plugin,你可以让它把你的密码写到一个文件里。你不能直接输出到控制台,因为插件会把它****出来。
93ze6v8z5#
是的,你可以把它拿回来。它是AES加密的,你必须在之前做一些事情,比如搜索密码短语。看看Secret类。但你看,已经有一些脚本在那里:https://github.com/tweksteen/jenkins-decrypthttps://gist.github.com/menski/8f9980999ed43246b9b2您可以在此处找到更多信息以及使用java实现此操作的方法:What password encryption Jenkins is using?
jfewjypa6#
转到 * 管理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("") }
6条答案
按热度按时间wswtfjt71#
通过访问
http(s)://${JENKINS_ADDRESS}/script
打开Jenkins安装的脚本控制台。在此处执行以下Groovy脚本:
其中
${ENCRYPTED_PASSPHRASE_OR_PASSWORD}
是您要查找的<password>
或<passphrase>
XML元素的加密内容。juzqafwq2#
首先,您需要获取加密值,该值可以方便地放置在您感兴趣的凭据项的password字段的
value
属性中。导航到Jenkins UI中的凭据项,单击password字段上的Inspect Element,然后复制其value
属性(类似于{AQAABAAAa6VBbyzg5AWMW2RnfaBaj46}
然后,转到
JENKINS_URL/script
并执行println( hudson.util.Secret.decrypt("{AQAABAAAa6VBbyzg5AWMW2RnfaBaj46}") )
;解密后的密码将显示在输入字段下o2rvlv0m3#
我知道这是旧的,但是...使用管道非常简单。下面是一个将凭据打印到控制台的示例管道:
执行此管道将在控制台中生成以下内容:
这里的技巧是凭据只在
withCredentials
块内被屏蔽。如果你把它们赋给一个在块外定义的变量,然后在块外打印该变量,则不会应用屏蔽。这已经被报告为一个bug,但是没有任何措施。zc0qhyus4#
如果你使用的是Jenkins Credential Binding Plugin,你可以让它把你的密码写到一个文件里。你不能直接输出到控制台,因为插件会把它****出来。
93ze6v8z5#
是的,你可以把它拿回来。它是AES加密的,你必须在之前做一些事情,比如搜索密码短语。看看Secret类。
但你看,已经有一些脚本在那里:
https://github.com/tweksteen/jenkins-decrypt
https://gist.github.com/menski/8f9980999ed43246b9b2
您可以在此处找到更多信息以及使用java实现此操作的方法:
What password encryption Jenkins is using?
jfewjypa6#
转到 * 管理Jenkins -〉脚本控制台 * 并运行以下代码: