Jenkinsジョブのxmlを変更しています。パスワードであるフィールドがあります。 xmlを取得すると、それが生のパスワードであった場所にハッシュがあります。
私が必要なのは、生のパスワード値からこのハッシュを作成する方法を知ることです。
<scm class="com.deluan.jenkins.plugins.rtc.JazzSCM">
<username>user</username>
<password>zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=</password>
</scm>
私はJenkins source code を読んでおり、HudsonPrivateSecurityRealm.Javaクラスが関係していると思いますが、saltパラメーターについてはわかりません。
PS:これは、Jenkinsのパスワード用ではありません。これは、ジョブ構成にパスワードフィールドがあるプラグイン用です。
実際、ハッシュではなく、暗号化されたパスワードです。暗号化キーはマスターノードに保存されていると思います。実際、マスターのスクリプトコンソールで次のgroovyスクリプトを実行することにより、パスワードを解読できます
import hudson.util.Secret
def secret = Secret.fromString("zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk=")
println(secret.getPlainText())
パスワードを暗号化する場合は、
import hudson.util.Secret
def secret = Secret.fromString("your password")
println(secret.getEncryptedValue())
キーはランダムに生成され、異なるマシンでは明らかにキーが異なるため、コンピューターで暗号化されたパスワードは特定のコンピューターでのみ復号化できます。
詳細については core/src/main/Java/hudson/util/Secret.Java をご覧ください
別の可能性は、Jenkins Groovyコンソールを介してGroovyスクリプトを実行することです(JENKINS_URL/scriptでアクセスできます)。
println(hudson.util.Secret.decrypt("zlvnUMF1/hXwe3PLoitMpQ6BuQHBJ1FnpH7vmMmQ2qk="))
Pythonを使用すると、他の方法もいくつか可能になります。
https://github.com/tweksteen/jenkins-decrypt
https://Gist.github.com/menski/8f9980999ed43246b9b2
Jenkinsは、すべての暗号化に AES-128-ECB を使用します。基本的に、master.key
ファイルを使用して、hudson.util.Secret
ファイルに保存されているキーを暗号化します。このキーは、credentials.xml
のパスワードの暗号化に使用されます。
したがって、Jenkinsのパスワードを解読するには、基本的にhudson.util.Secret
およびmaster.key
ファイルにアクセスする必要があります。 hudson.utils.Secret
クラスとそのfromString
メソッドを調べることで、Jenkinsがパスワードを暗号化する方法を正確に確認できます。基本的に、パスワードはKEYを使用して暗号化される前にマジックと連結されます。
詳細については、 Jenkinsの資格情報ストレージ を確認してください。
パスワードを復号化するには、次の手順を実行します。
/script
ページにアクセスします。次のコマンドを実行します。
println(hudson.util.Secret.decrypt("{XXX=}"))
または:
println(hudson.util.Secret.fromString("{XXX=}").getPlainText())
ここで、{XXX=}
は暗号化されたパスワードです。これにより、プレーンパスワードが出力されます。
逆に実行するには、次を実行します:
println(hudson.util.Secret.fromString("some_text").getEncryptedValue())
ソース: tuxfight3r/jenkins-decrypt.groovy
の要点 。
または、次のスクリプトを確認してください: tweksteen/jenkins-decrypt
、 menski/jenkins-decrypt.py
。