Извлечь кодовую фразу из учетных данных Jenkins.

Я добавил учетные данные SSH для Jenkins.

К сожалению, я забыл парольную фразу SSH и теперь хотел бы получить ее из архива учетных записей Jenkins, который находится в ${JENKINS_HOME}/credentials.xml.

Этот XML-документ, похоже, имеет учетные данные, зашифрованные в тегах XML <passphrase> или <password>.

Как я могу получить кодовую фразу plaintext?

Ответ 1

Откройте консоль script вашей установки Jenkins, посетив http(s)://${JENKINS_ADDRESS}/script.

В этом случае выполните следующие Groovy script:

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

где ${ENCRYPTED_PASSPHRASE_OR_PASSWORD} - зашифрованное содержимое XML-элемента <password> или <passphrase>, который вы ищете.

Ответ 2

Я знаю, что это старый, но... С конвейерами это очень просто. Вот пример конвейера, который выводит учетные данные на консоль:

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. Если вы присваиваете их переменной, определенной за пределами блока, и затем печатаете эту переменную за пределами блока, маскирование не применяется. Об этом сообщается как об ошибке, однако с этим ничего не делается.

Ответ 3

Если вы используете Jenkins Credential Binding Plugin, вы можете заставить его написать свой пароль в файл. Вы не можете просто выводить на консоль, так как плагин будет *****.

Конфигурация плагина привязки учетных данных для получения текста пароля в Windows

Ответ 4

Да, вы можете вернуть его. Это AES зашифровано, и вам нужно что-то сделать, прежде чем искать фразу. Изучите класс Secret.

Но вы посмотрите, уже есть некоторые скрипты:

https://github.com/tweksteen/jenkins-decrypt
https://gist.github.com/menski/8f9980999ed43246b9b2

Дополнительная информация и способ сделать это с помощью java, вы можете найти здесь:

Какое шифрование паролей Дженкинс использует?

Ответ 5

Во-первых, вам нужно получить зашифрованное значение, которое удобно размещать в атрибуте value поля пароля интересующего вас элемента учетных данных. Перейдите к элементу учетных данных в пользовательском интерфейсе Jenkins, нажмите "Проверить элемент" в поле пароля и скопируйте его атрибут value (что-то вроде {AQAABAAAa6VBbyzg5AWMW2RnfaBaj46}

Затем перейдите в JENKINS_URL/script и выполните println( hudson.util.Secret.decrypt("{AQAABAAAa6VBbyzg5AWMW2RnfaBaj46}") ); расшифрованный пароль появляется под полем ввода