Jenkins: Credentials Plugin — Извлечение Паролей

Плагин Jenkins Credentials маскирует такие секреты, как пароли и SSH или API ключи путем их шифрования.

Тем не менее, такие секреты могут быть расшифрованы и напечатаны в чистом виде.

В этой заметке я покажу 2 способа расшифровки секретов, замаскированных с помощью плагина Jenkins Credentials.

Дельный Совет: Шифрование частного облачного хранилища на основе Dropbox + EncFS! Читать далее →

Расшифровка Jenkins Credentials — Jenkins Pipeline

Ниже вы найдете примеры Jenkins-пайплайнов для расшифровки секретов, хранящихся в Jenkins Credentials.

Info: Измените credentials-id на соответствующие значения.

Напечатать имя пользователя и пароль в открытом виде:

node {
  stage('Jenkins Credentials | Decrypt Password') {
    withCredentials([usernamePassword(credentialsId: 'credentials-id',
                                      passwordVariable: 'password',
                                      usernameVariable: 'username')]) {
      creds = "\nUsername: ${username}\nPassword: ${password}\n"
    }
    println creds
  }
}

Вывести содержимое файла:

node {
  stage('Jenkins Credentials | Decrypt Secret File') {
    withCredentials([file(credentialsId: 'credentials-id',
                          variable: 'secretFile')]) {
      sh "cat ${secretFile}"
    }
  }
}

Вывести расшифрованную текстовую строку (например API-ключ):

node {
  stage('Jenkins Credentials | Decrypt Secret Text String') {
    withCredentials([string(credentialsId: 'credentials-id',
                            variable: 'secretText')]) {
      apiKey = "\nAPI key: ${secretText}\n"
    }
    println apiKey
  }
}

Напечатать SSH-логин и секретный ключ в открытом виде:

node {
  stage('Jenkins Credentials | Decrypt SSH key') {
    withCredentials([sshUserPrivateKey(credentialsId: 'credentials-id',
                                       keyFileVariable: 'key',
                                       usernameVariable: 'username')]) {
      creds = "\nUsername: ${username}\n"
      sh "cat ${key}"
    }
    println creds
  }
}

Напечатать SSH-логин, зашифрованный секретный ключ и кодовую фразу:

node {
  stage('Jenkins Credentials | Decrypt SSH key') {
    withCredentials([sshUserPrivateKey(credentialsId: 'credentials-id',
                                       keyFileVariable: 'key',
                                       usernameVariable: 'username',
                                       passphraseVariable: 'passphrase')]) {
      creds = "\nUsername: ${username}\nPassphrase: ${passphrase}\n"
      sh "cat ${key}"
    }
    println creds
  }
}

Расшифровка ‘credentials.xml’ — Groovy-скрипт

Другим способом расшифровки секретов из Jenkins Credentials является выполнение Groovy-скрипта на Jenkins-сервере.

По умолчанию, Jenkins хранит зашифрованные секреты в файле credentials.xml.

Вы можете получить зашифрованный секрет непосредственно из этого файла на Jenkins-сервере, либо просто открыть страницу с необходимыми учетными данными в веб-интерфейсе Jenkins, нажать Update, открыть исходный код страницы в браузере и увидеть зашифрованные секреты в соответствующих полях.

Зашифровано: {AQAAABAAAAAgYLJWCZtomd4hxJcnqmU...hr6V7AP3JEF77Sidql2V66}

Чтобы расшифровать зашифрованные данные, откройте Jenkins-консоль, перейдя по адресу http(s)://${JENKINS_URL}/script и выполните Groovy-скрипт:

println(hudson.util.Secret.decrypt(
    "{AQAAABAAAAAgYLJWCZtomd4hxJcnqmUgSI9q7hC9mnUt0zI/ATVpv5hr6V7AP3JEF77Sidql2V66}"
  )
)

Дельный Совет: Шифрование файлов и сообщений с помощью пароля из командной строки в Linux, используя OpenSSL! Читать Далее →