我正在尝试在加密的 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/