web-dev-qa-db-ja.com

安全な環境変数を復号化するにはどうすればよいですか?

私が持っています .travis.ymlいくつかの安全な(暗号化された)環境変数。次に、これらの変数を別のプロジェクトで使用するために暗号化を解除する必要があります。

これを行う簡単な方法はありますか(コミットをトリガーしてコンソール出力に出力する以外)。

23
user606521

解読できないと思います。公開鍵はデータの暗号化に使用され、travisが提供しない秘密鍵でのみ復号化できます。

18

私が理解していることからローカルで復号化することはできませんが、キー/値を回復することはできます。本来、ビルドプロセス中に使用するには、それらを復号化する必要があります。

  1. 現在のプロジェクトの最後のビルドに移動します。
  2. 「デバッグビルド」を選択します
  3. 提供されたユーザーとホストを使用してインスタンスにSSHで接続します***********@to2.tmate.io
  4. リモートシェルに移動したら、envを実行します。

これはすべての環境変数を出力するので、安全な環境変数を少し掘る必要がありますが、それらはそこにあります。

27
Daniel Smith

ここでのダニエルの回答 はおそらく機能しますが、 Travis CIのデバッグモードはデフォルトでパブリックリポジトリに対して無効になっています に依存しています。これは、セキュリティ上の懸念があるためです。

実際には別の方法があります。 このブログ投稿「RECOVER LOST TRAVISCI VARIABLES – TWO WAYS」 に触発され、簡略化されています。

最初にいくつかの説明:

  • なぜそれが可能ですか? Travis-CIは、自分のマシンで機能させるために、プレーンテキストに復号化して環境変数として設定する必要があるためです。それはそれを回復するあなたのチャンスです。
  • ただし、Travis-CIはすべてのstdoutをスキャンしてその特定の値をフィルタリングするため、echo $SECRETはコンソールログからそれを明らかにしません。 (とにかく)それは決して悪いことではありません。なぜなら、とにかく世界中で利用できるコンソールログに、回復した秘密を表示したくないからです。解決策は、インストールする必要があるコマンドラインツール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
1
RayLuo