我怎样才能解密安全的env变量?

时间:2015-07-20 14:48:08

标签: travis-ci

我有.travis.yml一些安全(加密)的env变量。现在我需要解密这些变量以在不同的项目中使用它们。

有没有简单的方法(触发提交并在控制台输出中打印它们除外)?

3 个答案:

答案 0 :(得分:22)

您不能从我理解的本地解密,但您可以恢复键/值。从本质上讲,它们必须经过解密才能在构建过程中使用。

  1. 转到您当前项目的最后一次构建。
  2. 选择“Debug Build”
  3. 使用提供的用户和主机***********@to2.tmate.io
  4. 通过SSH进入实例
  5. 进入远程shell后,运行env
  6. 这将打印所有环境变量,因此您必须为您的安全变量挖掘一些,但它们会在那里。

答案 1 :(得分:18)

我认为你不能解密它。公钥用于加密数据,只能用travis无法提供的私钥解密。

答案 2 :(得分:1)

Daniel's answer here可能会起作用,但是由于安全方面的考虑,它依赖于the Debug Mode of Travis CI, which is disabled for public repositories by default

实际上还有另一种方法。它的灵感来自this blog post "RECOVER LOST TRAVISCI VARIABLES – TWO WAYS",并从中简化。

先进行一些解释:

  • 为什么有可能?因为Travis-CI必须将其解密为纯文本并将其设置为环境变量,才能使其在他们的计算机上工作。这是您恢复它的机会。
  • 然而echo $SECRET不会从控制台日志中显示它,因为Travis-CI会扫描所有标准输出并过滤该特定值。 (Du) 这根本不是一件坏事,因为无论如何您都不希望控制台日志中显示的已恢复机密可供世界使用。解决方案是在需要安装的命令行工具ccrypt的帮助下,使用另一个KNOWN_SECRET对其进行加密。
  • 最后,您需要另一个工具来对加密的机密进行编码,以便在控制台日志中将其显示为普通字符。命令行工具base64十分方便,因为它已经在Travis CI的构建机器上,本地git bash(如果在Windows上使用git)或外壳程序(如果使用Linux)中可用。

TL; DR :就像1-2-3一样简单!

  1. 添加或修改您的.travis.yml以包含以下内容。
sudo: required
install:
  - sudo apt-get install -y ccrypt
  - echo $UNKNOWN_SECRET > info.txt
  - ccencrypt info.txt -K $KNOWN_SECRET
  - cat info.txt.cpt | base64
  1. 将以上更改提交到实验分支,并触发Travis CI运行。浏览控制台日志,找到该行输出,例如A1B2C3D4...

  2. 在您的本地计算机上,运行以下命令:

echo `A1B2C3D4...` | base64 -d > info.txt.cpt
sudo apt-get install -y ccrypt  # If you haven't already
ccrypt –d info.txt.cpt
# When prompt, type in the KNOWN_SECRET, and then you will have info.txt in plain text