我有一个bash脚本,它使用一个包含登录列表的文本文件:
LOGINLIST=/home/user/logins.txt
while read line
do
echo $line
done < $LOGINLIST
我宁愿不将登录列表存储为纯文本,但我不想每次运行脚本时都必须手动解密它。(让脚本提示输入密码是可以的。
我可以做到这一点的一种方法是在脚本中包含一行,例如 openssl 在读取文件之前解密文件。不幸的是,如果脚本停止(也许它登录的站点之一没有响应),这将使文件在不确定的时间段内不受保护。
所以我宁愿只将明文保留在内存中。
这篇关于LinuxQuestions(http://www.linuxquestions.org/questions/programming-9/can-we-hide-the-code-of-a-shell-script-370328/#post1887648)的文章表明,将明文发送到FIFO可能会解决问题,但这对我来说是完全陌生的领域。有没有更好/更简单的方法?脚本完成后如何擦除内存?
。有没有办法编辑加密的登录列表,同时将明文保存在内存中?
您可以使用openssl
和进程替换来执行此操作,而无需更改代码的结构。
要加密文件,请使用以下内容:
openssl blowfish -in plaint_text_file -out encrytped_file
(选择您想要的密码,它会提示您输入密码。
然后,您可以将加密文件与以下内容一起使用:
LOGINLIST=/path/to/encrypted/file
while read line
do
echo $line
done < <(openssl blowfish -d -in $LOGINLIST)
这将提示您输入密码。未生成临时文件。
(小心最后一个命令中的空格,它确实是< <(
。
您可以使用以下命令在 vim 中打开名为 encrytped_file 的现有加密文件:
openssl blowfish -d -in encrytped_file | vim -
您可以使用以下命令通过 vim 创建或修改/覆盖名为 encrytped_file 的加密文件:
:w !openssl blowfish -in /dev/stdin -out encrytped_file
只需查找密码提示。它们会被 vim 的 ui 遮挡一点。
以下是此答案中使用的技巧。您应该学习它们,而不是复制和粘贴它们,以便您可以在其他情况下使用它们。
- 当给出裸连字符的参数时,vim 从管道(又名:stdin 或标准输入)读取。
- vim 可以通过管道将其缓冲区传送到带有
:w !command
命令 - Unix 命令将裸连字符解释为"从标准输入读取"是很常见的,但并非所有命令都这样做。在这种情况下,您通常可以使用
/dev/stdin