从Jenkins的credentials.xml中提取密码短语

4urapxun  于 2022-11-02  发布在  Jenkins
关注(0)|答案(6)|浏览(380)

我已将SSH凭据添加到Jenkins。
不幸的是,我忘记了SSH密码,现在想从Jenkins的凭据存档中获得它,该存档位于${JENKINS_HOME}/credentials.xml
该XML文档似乎具有在XML标记<passphrase><password>中加密的凭据。
如何检索纯文本密码短语?

wswtfjt7

wswtfjt71#

通过访问http(s)://${JENKINS_ADDRESS}/script打开Jenkins安装的脚本控制台。
在此处执行以下Groovy脚本:

println( hudson.util.Secret.decrypt("${ENCRYPTED_PASSPHRASE_OR_PASSWORD}") )

其中${ENCRYPTED_PASSPHRASE_OR_PASSWORD}是您要查找的<password><passphrase> XML元素的加密内容。

juzqafwq

juzqafwq2#

首先,您需要获取加密值,该值可以方便地放置在您感兴趣的凭据项的password字段的value属性中。导航到Jenkins UI中的凭据项,单击password字段上的Inspect Element,然后复制其value属性(类似于{AQAABAAAa6VBbyzg5AWMW2RnfaBaj46}
然后,转到JENKINS_URL/script并执行println( hudson.util.Secret.decrypt("{AQAABAAAa6VBbyzg5AWMW2RnfaBaj46}") );解密后的密码将显示在输入字段下

o2rvlv0m

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,但是没有任何措施。

zc0qhyus

zc0qhyus4#

如果你使用的是Jenkins Credential Binding Plugin,你可以让它把你的密码写到一个文件里。你不能直接输出到控制台,因为插件会把它****出来。

93ze6v8z

93ze6v8z5#

是的,你可以把它拿回来。它是AES加密的,你必须在之前做一些事情,比如搜索密码短语。看看Secret类。
但你看,已经有一些脚本在那里:
https://github.com/tweksteen/jenkins-decrypt
https://gist.github.com/menski/8f9980999ed43246b9b2
您可以在此处找到更多信息以及使用java实现此操作的方法:
What password encryption Jenkins is using?

jfewjypa

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("")
}

相关问题