2015-04-05 175 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

相關問題