80 votes

Extraire la phrase de passe du fichier credentials.xml de Jenkins.

J'ai ajouté une accréditation SSH à Jenkins.

Malheureusement, j'ai oublié la phrase de passe SSH et je voudrais maintenant l'obtenir à partir de l'archive des justificatifs de Jenkins, qui se trouve à l'adresse suivante ${JENKINS_HOME}/credentials.xml .

Ce document XML semble contenir des informations d'identification cryptées dans des balises XML. <passphrase> ou <password> .

Comment puis-je récupérer la phrase de passe en clair ?

189voto

Abdull Points 1666

Ouvrez la console script de votre installation Jenkins en vous rendant à l'adresse suivante http(s)://${JENKINS_ADDRESS}/script .

Là, exécutez le script Groovy suivant :

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

${ENCRYPTED_PASSPHRASE_OR_PASSWORD} est le contenu crypté de la <password> ou <passphrase> élément XML que vous recherchez.

36 votes

Et afin d'obtenir la valeur du mot de passe de ${ENCRYPTED_PASSPHRASE_OR_PASSWORD} : allez à credentials, update, dans le navigateur "See source code" et vous obtiendrez le mot de passe crypté dans le champ de données pour le mot de passe. Utilisez ensuite cette fonction.

2 votes

Que faire si je n'ai pas accès à /script . Moyens Jenkins accès global .

2 votes

L'appel de décryptage a fonctionné pour moi sans le signe du dollar.

35voto

Leo Toff Points 541

Tout d'abord, vous devez obtenir la valeur cryptée qui est placée de manière pratique dans le fichier value du champ du mot de passe de l'élément d'informations d'identification qui vous intéresse. Naviguez jusqu'à l'élément d'identification dans l'interface utilisateur de Jenkins, cliquez sur Inspecter l'élément sur le champ du mot de passe, et copiez son nom. value (quelque chose comme {AQAABAAAa6VBbyzg5AWMW2RnfaBaj46}

Ensuite, allez sur JENKINS_URL/script et exécute println( hudson.util.Secret.decrypt("{AQAABAAAa6VBbyzg5AWMW2RnfaBaj46}") ) ; le mot de passe décrypté apparaît sous le champ de saisie.

23voto

Aleks G Points 25412

Je sais que c'est vieux, mais... Avec les pipelines, c'est extrêmement simple. Voici un exemple de pipeline qui va imprimer les informations d'identification dans la console :

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

L'exécution de ce pipeline produit le résultat suivant dans la console :

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

L'astuce ici est que les informations d'identification ne sont masquées qu'à l'intérieur de la balise withCredentials bloc. Si vous les affectez à une variable définie en dehors du bloc et que vous imprimez ensuite cette variable en dehors du bloc, aucun masquage n'est appliqué. Ce problème a été signalé comme un bogue, mais rien n'a été fait à ce sujet.

1 votes

Enveloppe script { } si vous utilisez la syntaxe déclarative du pipeline.

0 votes

@Cartucho Quelle version de Jenkins avez-vous vérifiée ?

0 votes

@Cartucho J'ai juste copié-collé ce code et l'ai exécuté en 2.176.2 - ça a marché comme sur des roulettes.

7voto

raterus Points 1052

Si vous utilisez le Plugin Jenkins Credential Binding vous pouvez faire en sorte qu'il écrive votre mot de passe dans un fichier. Vous ne pouvez pas simplement l'envoyer à la console, car le plugin l'enverra à *****.

Credential Binding Plugin configuration to get password text on Windows

3 votes

Vous pouvez également modifier le mot de passe de manière à ce que le plugin ne puisse pas l'extraire à l'adresse ****. Par exemple, comme commande shell unix : echo $PASS | sed -e 's/./&-/g'? .

3voto

CSchulz Points 2374

Oui, vous pouvez le récupérer. Il est crypté en AES et vous devez d'abord effectuer certaines opérations, comme la recherche de la phrase de passe. Jetez un coup d'oeil à la Secret classe.

Mais regardez, il existe déjà des scripts :

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

Plus d'informations et une façon de le faire avec java, vous pouvez trouver ici :

Quel mot de passe Jenkins utilise-t-il ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X