2015-04-05 221 views
2

我想对S3一些环境变量存储在加密的shell脚本(所以这些密钥不存储我的驱动器加密),像这样:从gpg加密的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脚本来设置环境变量?

+0

[进程替换](http://www.gnu.org/software/bash/manual/bash.html#Process-Substitution)在Bash可能会这样做;在Zsh中可用吗? '源<(gpg --decrypt ./setenv.sh.gpg)'。安全性是否如此虚幻?什么是阻止您的用户运行GPG命令并查看输出? – 2015-04-05 14:28:36

+0

我想这样设置脚本的原因是我可以为不同的项目加载不同的S3键,而不必每次都手动输入它们。安全方面,我认为这是一个好主意,以防笔记本电脑被盗或被盗用。 (我有完整的磁盘加密,但它也可能被盗取,而解锁等) – waffl 2015-04-06 08:20:23

+0

我认为它可以作为'安全通过默默无闻',但只要你认识到,并意识到它的局限性,没有很大的伤害。特别是,在我看来,你不应该依靠这个来保证一切安全。 – 2015-04-06 13:38:04

回答

1

正如第一位评论者所说,source <(gpg --decrypt ./setenv.sh.gpg)将完成您所追求的内容。它应该在Zsh以及bash中工作。

N.B. Zsh也有用于进程替换的=(...),但这会在某个地方留下一个未加密的临时文件,这会破坏使用加密的目的。坚持使用命名管道的<(...)。

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

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

+0

出于某种原因,运行此回响几行声明它需要密码为gpg解密但从不提供输入密码的提示?我甚至不能按Ctrl + C返回到shell。 – waffl 2015-04-07 13:12:26

+0

奇怪的是,它在bash中工作,但不是zsh,即使完全删除我的'.zshrc'配置文件 – waffl 2015-04-07 13:57:45