শংসাপত্রগুলি। এক্সএমএল থেকে জেনকিন্স পাসওয়ার্ডগুলি কীভাবে ডিক্রিপ্ট করবেন?


37

আমি প্রকল্পটি গ্রহণ করেছি যেখানে জেনকিন্সের প্রচুর শংসাপত্রগুলির পাসওয়ার্ড বা পাসফ্রেজের স্ট্রিং রয়েছে যা প্রকল্পের সাথে অগ্রগতির জন্য আমার জানা দরকার, দুর্ভাগ্যক্রমে এগুলি কোথাও নথিভুক্ত করা হয়নি।

আমি এই credentials.xmlফাইলটি পরীক্ষা করে দেখেছি যেখানে এই শংসাপত্রগুলি সংরক্ষণ করা হয় তবে সেগুলি সাধারণ পাঠ্য নয়, যেমন:

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

দ্রষ্টব্য: আমি গোপনীয়তার কারণে এটিকে কিছুটা পরিবর্তন করেছি।

উপরের স্ট্রিংয়ের ভিত্তিতে আমি এর আসল পাসওয়ার্ডটি কীভাবে ডিক্রিপ্ট করব?


প্রস্তাবিত উত্তরের সাথে আমি ত্রুটি পাচ্ছি: প্রিন্টলন (hudson.util.Secret.decrypt ("{xx xxx / wwww + yyyy / zzzz =}}")) + চিহ্নটি স্ক্রিপ্টটি ভঙ্গ করছে। যেকোনো পরামর্শ?
জে বাউ

@ জাবাউ একক বন্ধনী দিয়ে চেষ্টা করুন: "{...}"একবার অতিরিক্ত সরিয়ে ফেলুন।
কেনারব

উত্তর:


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

সমস্ত ফোল্ডার থেকে সমস্ত ডোমেনের শংসাপত্র পেতে কীভাবে এটি সংশোধন করবেন?
জ্যামেরি

@ জ্যামি আমি আরেকটি উদাহরণ যুক্ত করেছি
ম্যাগনাস

দুর্দান্ত ধন্যবাদ :-)

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))
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.