我尝试将S3的一些环境变量存储在一个加密的shell脚本中(这样这些密钥就不会以未加密的形式存储在我的驱动器上),如下所示:
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)运行文件脚本,它会解密文件,但没有相应地加载环境变量( printenv证实了这一点)。
我觉得这可能和这个问题有关:Shell script to set environment variables
但是,我已经使用source尝试了许多不同的变体,但都无济于事,因为我假设source需要的是文件而不是脚本的内容。
如何使用gpg加密的shell脚本来设置环境变量?
发布于 2015-04-06 23:52:35
正如第一个评论者所说,source <(gpg --decrypt ./setenv.sh.gpg)将实现您所追求的目标。它应该可以像bash一样在Zsh中工作。
N.B. Zsh也有=(...)用于进程替换,但这将使未加密的临时文件留在某个地方,这与使用加密的目的背道而驰。坚持<(...)它使用命名管道。
如果目标是保护凭据不被使用它们的用户访问,那么这是徒劳的。另一方面,如果你想在笔记本电脑被盗的情况下保护凭证,那么这里有一些真正的保护措施。一种相当常见的策略是将凭据加密保存在磁盘上,并仅在需要时才将其加载到内存中。
考虑到你的硬盘是加密的,我不确定你能从中得到多少。我能想到的唯一现实的好处是,如果你保留未加密的备份,它们会被窃取。这取决于你有多偏执,这可能值得,也可能不值得。
发布于 2019-06-21 00:01:57
在Zsh中,您应该能够调用:
$(gpg --decrypt ./setenv.sh.gpg)或者在脚本中弹出该行,然后用.调用它,例如:
. decrypt-and-setenv.sh这会将env var导出到当前的shell中,并使文件保持加密状态。
https://stackoverflow.com/questions/29457360
复制相似问题