जेनकिंस पासवर्ड को क्रेडेंशियलएक्सएक्सएमएल से कैसे डिक्रिप्ट करें?


37

मैंने इस परियोजना को संभाला है जहाँ बहुत सारे जेनकिंस क्रेडेंशियल्स में पासवर्ड या पासफ़्रेज़ स्ट्रिंग्स हैं जिन्हें परियोजना के साथ प्रगति करने के लिए मुझे जानना आवश्यक है, दुर्भाग्य से ये कहीं भी प्रलेखित नहीं थे।

मैंने वह credentials.xmlफ़ाइल चेक की है जहाँ ये क्रेडेंशियल संग्रहीत हैं, लेकिन वे सादे पाठ में नहीं हैं, जैसे:

<passphrase>{AAAAAAAAAAAANzxft/rDzyt8mhxpn3O72dxvVqZksL5vBJ4jNKvAjAA=}</passphrase>

नोट: मैंने इसे गोपनीयता कारणों से थोड़ा बदल दिया है।

उपरोक्त स्ट्रिंग के आधार पर मैं इसके मूल पासवर्ड को कैसे डिक्रिप्ट कर सकता हूं?


मुझे प्रस्तावित उत्तर के साथ त्रुटि हो रही है: Println (hudson.util.Secret.decrypt ("{{xxx / wwww + yyyy / zzzz =}}") + प्रतीक स्क्रिप्ट को तोड़ रहा है। कोई उपाय?
जय बाउ

@JayBau एकल कोष्ठक के साथ प्रयास करें: "{...}"एक बार अतिरिक्त हटा दें।
केनोरब

जवाबों:


46

सौभाग्य से एक hudson.util.Secret.decrypt()समारोह है जो इस के लिए इस्तेमाल किया जा सकता है, इसलिए:

  1. जेनकिंस में, /scriptपृष्ठ पर जाएं।
  2. निम्न आदेश चलाएँ:

    println(hudson.util.Secret.decrypt("{XXX=}"))
    

    या:

    println(hudson.util.Secret.fromString("{XXX=}").getPlainText())
    

    {XXX=}आपका एन्क्रिप्टेड पासवर्ड कहां है। इससे प्लेन का पासवर्ड प्रिंट हो जाएगा।

    विपरीत करने के लिए, दौड़ें:

    println(hudson.util.Secret.fromString("some_text").getEncryptedValue())
    

स्रोत: पर सारtuxfight3r/jenkins-decrypt.groovy


वैकल्पिक रूप से निम्नलिखित स्क्रिप्ट की जांच करें: tweksteen/jenkins-decrypt, menski/jenkins-decrypt.py


अधिक जानकारी के लिए, चेक करें: जेनकिंस में क्रेडेंशियल स्टोरेज


7

यहाँ एक छोटा सा स्निपेट है जिसे आप सिर्फ जेनकिंस स्क्रिप्ट कंसोल से चला सकते हैं, अपने सभी क्रेडेंशियल्स को सादे पाठ में डंप करने के लिए।

com.cloudbees.plugins.credentials.SystemCredentialsProvider.getInstance().getCredentials().forEach{
  it.properties.each { prop, val ->
    println(prop + ' = "' + val + '"')
  }
  println("-----------------------")
}

एक और अधिक जटिल संस्करण जो गैर-सिस्टम क्रेडेंशियल प्रदाताओं के लिए सूचीबद्ध है:

import com.cloudbees.plugins.credentials.CredentialsProvider
import com.cloudbees.plugins.credentials.Credentials
import com.cloudbees.plugins.credentials.domains.Domain
import jenkins.model.Jenkins
def indent = { String text, int indentationCount ->
  def replacement = "\t" * indentationCount
  text.replaceAll("(?m)^", replacement)
}

Jenkins.get().allItems().collectMany{ CredentialsProvider.lookupStores(it).toList()}.unique().forEach { store ->
  Map<Domain, List<Credentials>> domainCreds = [:]
  store.domains.each { domainCreds.put(it, store.getCredentials(it))}
  if (domainCreds.collectMany{ it.value}.empty) {
    return
  }
  def shortenedClassName = store.getClass().name.substring(store.getClass().name.lastIndexOf(".") + 1)
  println "Credentials for store context: ${store.contextDisplayName}, of type $shortenedClassName"
  domainCreds.forEach { domain , creds ->
    println indent("Domain: ${domain.name}", 1)
    creds.each { cred ->
      cred.properties.each { prop, val ->
        println indent("$prop = \"$val\"", 2)
      }
      println indent("-----------------------", 2)
    }
  }
}

सभी फ़ोल्डरों से सभी डोमेन से क्रेडेंशियल प्राप्त करने के लिए इसे कैसे संशोधित करें?
jmary

@jmary मैंने एक और उदाहरण जोड़ा है
मैग्नस

बहुत धन्यवाद :-)
jmary

1

रिकॉर्ड के लिए, निम्नलिखित स्निपेट को कंसोल में चिपकाया जाना भी काम करता है:

def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
    com.cloudbees.plugins.credentials.common.StandardUsernameCredentials.class,
    Jenkins.instance,
    null,
    null
)

for(c in creds) {
  if(c instanceof com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey){
    println(String.format("id=%s  desc=%s key=%s\n", c.id, c.description, c.privateKeySource.getPrivateKeys()))
  }
  if (c instanceof com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl){
    println(String.format("id=%s  desc=%s user=%s pass=%s\n", c.id, c.description, c.username, c.password))
  }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.