我需要一个 bash 脚本来获取加密的文件,因为获取的文件包含敏感信息。
我希望脚本提示输入 GPG 密码,然后运行,获取加密文件。但我不知道该怎么做。必须有用户输入密码,因为我不想将密钥与加密文件一起存储在服务器上。
研究一些不同的方法,我不想解密文件,获取非加密文件,然后删除它。如果脚本中出现问题,我想减少留下未加密文件的机会。
有没有办法以这种方式获取文件的 GPG 输出?可能收集 STDOUT 并解析它(如果 GPG 甚至可以通过这种方式输出内容)。
另外,如果有另一种方法来加密 shell 脚本可以使用的文件,我不知道,但对其他可能性持开放态度。
答案1
您可以使用以下方法执行此操作流程替代。
. <(gpg -qd "$encrypted_filename")
这是一个例子:
% cat > to-source <<< 'echo "Hello"'
% . ./to-source
Hello
% gpg -e -r [email protected] to-source
% . <(gpg -qd to-source.gpg)
Hello
gpg -d
不会将文件保存到磁盘,它只是将其输出到标准输出。<()
使用一个先进先出,这也不会导致实际文件数据写入磁盘。
在 bash 中,.
andsource
是同义词,但.
更便携(它是 POSIX 的一部分),所以我在这里使用了它。但请注意,这<()
并不那么可移植——据我所知,它仅在 bash、zsh、ksh88 和 ksh93 中受支持。 pdksh 和 mksh 有协进程可以起到同样的效果。
答案2
如果您已gpg-agent
正确设置,使用pinentry-tty
或其他不会污染标准输入/标准输出的版本,那么您应该能够执行以下操作:
source <( gpg --decrypt file.gpg )
这使用进程替换将结果提供给就source
好像它是一个文件一样。一旦 shell 处理完毕,特定的文件数据就会消失,但此后您仍然需要小心 shell 内存中的敏感数据。