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

时间:2015-04-05 12:39:28

标签: shell encryption zsh

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

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

这已保存为我已加密为setenv.sh的shell脚本setenv.sh.gpg

我尝试使用eval $(gpg --decrypt ./setenv.sh.gpg)运行文件脚本来解密文件,但是没有相应地加载环境变量(printenv确认了这一点)。

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

但是,我已尝试使用source的多种不同变体无效,因为我认为source需要文件而不是脚本的内容。

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

2 个答案:

答案 0 :(得分:1)

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

  

N.B。 Zsh还具有=(...)进程替换,但是这将使未加密的临时文件位于某处,这会破坏使用加密的目的。坚持&lt;(...)使用命名管道。

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

鉴于您的硬盘已加密,我不确定您将从中获得多少收益。我能想到的唯一现实好处是,如果您保留未加密的备份并且它们被盗。取决于你是多么偏执,它可能或可能不值得麻烦。

答案 1 :(得分:0)

在Zsh中,您应该可以调用:

$(gpg --decrypt ./setenv.sh.gpg)

或在脚本中弹出该行,然后使用.进行调用,例如:

. decrypt-and-setenv.sh

这会将env var导出到当前的shell中,并使文件保持加密状态。