【问题标题】:How I can decrypt secure env variables in Travis CI?如何解密 Travis CI 中的安全环境变量?
【发布时间】:2015-10-09 18:08:12
【问题描述】:

我有 .travis.yml 和一些安全(加密)环境变量。现在我需要对这些变量进行解密,以便在不同的项目中使用它们。

有没有简单的方法来做到这一点(除了触发提交并在控制台输出中打印它们)?

【问题讨论】:

标签: travis-ci


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    据我所知,您无法在本地解密,但您可以恢复键/值。从本质上讲,它们必须被解密才能在构建过程中使用。

    1. 转到您当前项目的最后一次构建。
    2. 选择“调试构建”
    3. 使用提供的用户和主机***********@to2.tmate.io SSH 进入实例
    4. 进入远程 shell 后,运行 env

    这将打印所有环境变量,因此您将不得不挖掘一些安全变量,但它们会在那里。

    【讨论】:

    • 有关 Travis CI 调试版本的更多信息:docs.travis-ci.com/user/running-build-in-debug-mode
    • 5.您可以直接使用您在.travis.yml 中的解密命令来揭示您的秘密。命令如openssl aes-256-cbc -K $encrypted_..._key -iv $encrypted_..._iv -in secrets.tar.enc -out secrets.tar -d
    • 感谢 Daniel 和 @Rahman 指出了一个新的可能性(尽管我还没有完全弄清楚 Rahman 提到的“解密命令”——希望他能解释更多,可能作为一个单独的答案)。尽管如此,你们是否碰巧知道您的方法是否仍然适用于使用this way检索encrypted deployment password,这意味着纯文本不存在于环境变量中,因此您无法使用env获取它,可以吗?
    • Rahmans 示例似乎与加密文件有关。您可能只想解密 travis 文件中的值。它应该仍然可以通过。我对 openssl 的了解还不够,无法告诉您如何执行此操作。我怀疑我的方法是否适用于您的情况。
    【解决方案3】:

    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 会扫描所有标准输出并过滤该特定值。 (呃。) 这根本不是一件坏事,因为无论如何您都不希望您恢复的秘密显示在控制台日志中可供全世界使用。解决方案是在需要安装的命令行工具ccrypt 的帮助下,使用另一个 KNOWN_SECRET 对其进行加密。
    • 最后,您需要另一个工具来对加密的秘密进行编码,以便在控制台日志中显示为普通字符。命令行工具base64 派上用场了,因为它已经在 Travis CI 的构建机器和本地 git bash(如果您在 Windows 上使用 git)或 shell(如果您使用 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
    

    【讨论】:

    • 谢谢!虽然接受的答案没有错,但这是一种绕过它的方法,所以在我看来这应该是真正接受的答案。
    • 谢谢,这是处理 Travis 偷偷丢失秘密的适当方式
    • 我试过这个方法......基本上我已经提供 known_secret 作为“测试”,它是字符串,unknown_secret 是我想要找出的......但是当我使用命令 ccrypt 解密它时 – d info.txt.cpt..,它创建了包含一些随机字符的 info.txt.cpt.cpt...并且没有创建 info.txt
    • @harshalbhavsar 听起来您对ccrypt 的使用不正确,然后您将其加密了两次?您可以先在本地进行一些试运行以使其正确。
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2018-11-22
    • 2020-02-06
    • 2015-06-15
    相关资源
    最近更新 更多