我已经为Jenkins添加了SSH凭证。
不幸的是,我忘记了SSH密码,现在想从Jenkins的凭据存档中获取它,该存档位于${JENKINS_HOME}/credentials.xml
。
该XML文档似乎在XML标记<passphrase>
或<password>
中加密了凭据。
如何检索明文密码?
答案 0 :(得分:117)
打开你的Jenkins&#39;安装访问http(s)://${JENKINS_ADDRESS}/script
的脚本控制台。
在那里,执行以下Groovy脚本:
println( hudson.util.Secret.decrypt("${ENCRYPTED_PASSPHRASE_OR_PASSWORD}") )
其中${ENCRYPTED_PASSPHRASE_OR_PASSWORD}
是您要查找的<password>
或<passphrase>
XML元素的加密内容。
答案 1 :(得分:8)
我知道这很老了,但是...使用管道,这非常简单。这是一个示例示例,它将凭证打印到控制台:
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
块内屏蔽凭据。如果将它们分配给在块外定义的变量,然后在该块外打印该变量,则不会应用任何遮罩。据报道这是一个错误,但是对此没有做任何事情。
答案 2 :(得分:4)
如果您使用的是Jenkins Credential Binding Plugin,则可以将密码写入文件。您无法输出到控制台,因为插件会将其输出。
答案 3 :(得分:3)
首先,您需要获取加密的值,该值方便地放置在您感兴趣的该凭据项的密码字段的value
属性中。在您的Jenkins UI中导航到凭据项,单击检查元素在密码字段上,然后复制其value
属性(类似{AQAABAAAa6VBbyzg5AWMW2RnfaBaj46}
然后,转到JENKINS_URL/script
并执行println( hudson.util.Secret.decrypt("{AQAABAAAa6VBbyzg5AWMW2RnfaBaj46}") )
;解密的密码出现在输入字段下
答案 4 :(得分:2)
是的,你可以取回它。它是AES加密的,你必须先做一些事情,比如搜索密码。请查看Secret课程。
但你看,已经有一些脚本了:
https://github.com/tweksteen/jenkins-decrypt
https://gist.github.com/menski/8f9980999ed43246b9b2
更多信息以及使用java的方法,您可以在这里找到: