Извлечь кодовую фразу из учетных данных 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}") )
; расшифрованный пароль появляется под полем ввода