shell - 从 gpg 加密的 shell 脚本设置环境变量?

标签 shell encryption zsh

我正在尝试在加密的 shell 脚本中存储 S3 的一些环境变量(因此这些 key 不会以未加密的方式存储在我的驱动器上),如下所示:

export AWS_ACCESS_KEY_ID="example_key_id"
export AWS_SECRET_ACCESS_KEY="example_secret_access_key"

这被保存为 shell 脚本 setenv.sh,我已将其加密为 setenv.sh.gpg

我尝试使用 eval $(gpg --decrypt ./setenv.sh.gpg) 运行文件脚本,它会解密文件,但不会相应地加载环境变量(a printenv 证实了这一点)。

我觉得可能与这个问题有关:Shell script to set environment variables

但是,我尝试了 source 的许多不同变体,但均无济于事,因为我假设 source 需要一个文件而不是脚本的内容。

如何使用 gpg 加密的 shell 脚本来设置环境变量?

最佳答案

正如第一个评论者所说 source <(gpg --decrypt ./setenv.sh.gpg)会完成你所追求的。它应该可以在 Zsh 和 bash 中工作。

N.B. Zsh also has =(...) for process substitution, but this will leave an unencrypted temp file lying around somewhere which defeats the purpose of using encryption. Stick to <(...) which uses a named pipe.

如果目标是保护凭证不被用户使用,那么这是徒劳的。另一方面,如果您想在笔记本电脑被盗时保护凭据,那么这里有一些真正的保护。将凭据加密在磁盘上并仅在需要时将其加载到内存中是一种相当常见的策略。

鉴于您的硬盘已加密,我不确定您能从中获得多少 yield 。我能立即想到的唯一现实的好处是,如果您保留未加密的备份,并且它们会被盗。根据你的偏执程度,这可能值得也可能不值得。

关于shell - 从 gpg 加密的 shell 脚本设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29457360/

相关文章:

windows - 批处理 - 检查变量是否不为空并执行操作

linux - Groovy 中 JAVA_HOME 未正确定义

java - JAVA加密一个整数只得到数字字符

java - 为 tls 握手指定密码套件

zsh - 是否可以在 zsh 中自动分页输出?

linux - freeTDS 在 Asterisk 拨号方案中插入 blob

node.js - (JWT) RSA加密/解密问题

zsh - 修复 zsh _arguments 选项(--whatever)在非选项(noDashes)输入后完成

python - 以有限的执行时间运行命令

bash - 用于列出给定目录中的文件以及它们是文件还是目录的 Shell 脚本