Jenkins şifreleri credentials.xml dosyasındaki şifresini çözmek nasıl?


37

Projeye devam edebilmek için bilmem gereken birçok Jenkins kimlik belgesinin şifreleri veya şifre dizeleri olduğu projeyi devraldım, ne yazık ki bunlar hiçbir yerde belgelenmedi.

credentials.xmlBu kimlik bilgilerinin depolandığı dosyayı kontrol ettim , ancak düz metin değiller, örneğin:

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

Not: Gizlilik nedeniyle biraz değiştirdim.

Yukarıdaki dizgiye dayanarak orijinal şifresini nasıl çözebilirim?


Önerilen cevap ile hata alıyorum: println (hudson.util.Secret.decrypt ("{{xxx / wwww + yyyy / zzzz =}}")) + sembolü betiği kırıyor. Herhangi bir öneri?
Jay Bau

@JayBau Tek parantez kullanarak deneyin: bir "{...}"kez daha fazla çıkarın.
kenorb

Yanıtlar:


46

Neyse ki, bunun hudson.util.Secret.decrypt()için kullanılabilecek bir fonksiyon var, yani:

  1. Jenkins'de, /scriptsayfaya git.
  2. Aşağıdaki komutu çalıştırın:

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

    veya:

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

    {XXX=}şifreli şifreniz nerede . Bu, düz şifreyi yazdıracaktır.

    Tersini yapmak için koşun:

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

Kaynak: attuxfight3r/jenkins-decrypt.groovy .


Alternatif olarak aşağıdaki komut dosyalarını kontrol edin: tweksteen/jenkins-decrypt, menski/jenkins-decrypt.py.


Daha fazla ayrıntı için, şunları kontrol edin: Jenkins'de kimlik bilgileri saklama .


7

Tüm kimlik bilgilerinizi düz metne atmak için jenkins komut dosyası konsolundan çalıştırabileceğiniz kısa bir kod metni.

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

Sistem dışı kimlik bilgileri sağlayıcılarını listeleyen daha karmaşık bir sürüm:

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

Tüm etki alanlarından, tüm klasörlerden kimlik bilgileri almak için bu nasıl değiştirilir?
jmary

@jmary Başka bir örnek ekledim
Magnus

Harika teşekkürler :-)
jmary

1

Kayıt için, konsola yapıştırılacak aşağıdaki kod parçası da işi yapıyor:

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))
  }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.