如何从凭证库下载jenkins机密文件?

如何从凭证库下载jenkins机密文件?,jenkins,jenkins-plugins,Jenkins,Jenkins Plugins,我只能上传现有的詹金斯秘密文件,不能下载现有的 如何下载已上载的现有机密文件以确认其内容?如果您在运行Jenkins的计算机上具有shell访问权限和sudo/root/Jenkins Unix用户权限,则可以通过执行以下操作检索机密文件: 在具有访问机密文件权限的某些Jenkins作业中,选择“配置” 在配置界面上的“生成环境”下,选择“使用密文”或“文件” 单击添加->机密文件。这将创建一个新的机密文件绑定 选择特定凭据,然后从其下方的下拉菜单中选择要检索的机密文件。假设您的机密文件存储在

我只能上传现有的詹金斯秘密文件,不能下载现有的


如何下载已上载的现有机密文件以确认其内容?

如果您在运行Jenkins的计算机上具有shell访问权限和sudo/
root
/Jenkins Unix用户权限,则可以通过执行以下操作检索机密文件:

  • 在具有访问机密文件权限的某些Jenkins作业中,选择“配置”
  • 在配置界面上的“生成环境”下,选择“使用密文”或“文件”
  • 单击添加->机密文件。这将创建一个新的机密文件绑定
  • 选择特定凭据,然后从其下方的下拉菜单中选择要检索的机密文件。假设您的机密文件存储在文件名my-secret-file.txt下
  • 为此机密文件分配一个变量,例如
    MY\u secret\u file\u TXT
  • 现在,在预构建步骤下,单击添加预构建步骤->执行shell
  • 在命令文本区域中,添加以下shell脚本:

    echo "executing user is $(whoami)"
    
    # remove my-secret-file.txt before possibly getting an overwriting error
    rm -f $WORKSPACE/my-secret-file.txt
    
    echo "Jenkins project workspace: $WORKSPACE"
    cp $MY_SECRET_FILE_TXT $WORKSPACE
    
  • 单击“保存”保存此配置

下次触发此项目的生成时,机密文件应显示在此项目的工作区中,即位于位置
$workspace/my secret file.txt
。例如,在我的Ubuntu 14.04.5 LTS安装中,安装了安装包和守护进程
jenkins
,该位置是
/var/lib/jenkins/workspace/$jenkins\u PROJECT\u NAME/my secret file.txt

,如果您可以访问jenkins实例的脚本控制台(例如,通过在浏览器中访问),您可以运行以下脚本:

import com.cloudbees.plugins.credentials.*;
import com.cloudbees.plugins.credentials.domains.Domain;
import org.jenkinsci.plugins.plaincredentials.impl.FileCredentialsImpl;

println "Jenkins credentials config file location=" + SystemCredentialsProvider.getConfigFile();
println ""

def fileName = "my-secret-file.txt"

SystemCredentialsProvider.getInstance().getCredentials().stream().
  filter { cred -> cred instanceof FileCredentialsImpl }.
  map { fileCred -> (FileCredentialsImpl) fileCred }.
  filter { fileCred -> fileName.equals( fileCred.getFileName() ) }.
  forEach { fileCred -> 
    String s = new String( fileCred.getSecretBytes().getPlainData() )
    println "XXXXXX BEGIN a secret file with fileName=" + fileName + " XXXXXXXXXXXX"
    println s
    println "XXXXXX END a secret file with fileName=" + fileName + " XXXXXXXXXXXX"
    println ""
  }
fileName
更改为要打印的文件名。 此脚本将打印Jenkins credentials store全局域中文件名为
fileName
的文件的内容

此脚本的可修复警告:

  • 要求Jenkins在Java8JVM中运行。 这个脚本
  • 仅在全局凭据域中查找(请参阅)

    • 带有脚本控制台的标记答案非常棒

      还有一个脚本将列出可以从控制台运行的所有机密:

      我通常通过创建这样的工作从詹金斯那里获取秘密:

      Jenkins屏蔽了输出中的所有键,所以打印时只需替换一个字符。如果您的键中有另一个
      0
      ,它将显示为
      ******
      ,您可以尝试替换另一个字符,或者将其拆分为两个,并在不同的行上打印两个半字符,或者其他类似的技巧

      你也可以像这样把它直接粘贴到一个文件中

      echo $HELLO > slack-key.txt
      

      我认为这不是一个有效的论点。这是缺少的管理功能。应该由管理员来确保对Jenkins的管理员访问,Jenkins应该允许管理员查看机密。Vault和其他现代机密管理人员有这样的能力。下载/复制机密文件以便在工作区中使用也是一个类似的问题:因此我可以像这样对其进行黑客攻击,但我正在寻找一种更方便的方法。我甚至更喜欢从命令行手动解密机密-可能吗?太好了。但问题是,这是将文件写入临时位置,还是我可以确保它在读取后不会留在任何位置。另外,我如何获取其他机密,如安全字符串和用户名/密码?我试着只使用
      StringCredentialsImpl
      ,但它不管用,非常管用。。。