Shell脚本:解密加密的密码并将其存储在变量中

Shell脚本:解密加密的密码并将其存储在变量中

我有一个文件“credential.txt”,其中包含 mysql 的密码。我有另一个脚本调用此文本文件并从中检索密码。出于安全考虑,我不想直接存储密码。为此,我使用 Triple-DES Cipher 加密对文件进行了加密:

openssl des3 -salt -in credential.txt -out credential.des3

参考:https://linuxtidbits.wordpress.com/2009/01/12/encryptingdecrypting-a-file-easily-with-a- Couple-bash-scripts/

现在,从我的 shell 脚本中,我想从 credential.des3 获取加密密码,并将其存储在变量中。从引用的文章中,它展示了如何解密文件并将解密的密码存储在不同的文件中。

openssl des3 -d -salt -in credential.des3 -out unencrypted-data.file

问题是我不想将解密的文件保存在系统上。我想捕获解密的输出。我的 shell 脚本是使用 cronjobs 自动运行的,所以我不能要求用户指定密码。有什么方法可以解密密码并将其存储在变量中,例如:

var = $(decrypted_pass)

并在 shell 脚本中必要时使用它。

我已经尝试过以下命令,但它不起作用。

var=$(openssl das3 -salt -in credential.des3)

答案1

你可以使用

pass=$(openssl des3 -d -salt -in credential.des3)

(未指定输出文件)

但这里的问题似乎是您正在从 运行脚本cron。虽然您可以安排通过环境变量将一些数据传递到cron脚本,但没有简单的方法可以将密码传递到cron而不将其存储在文件系统上(crontab很可能在文件中)。

为了避免明文密码访问持久存储,您可以安排将其存储在tmpfs文件系统上(在 Linux 上)。您可以使用mount -t tmpfs tmpfs /path/to/mount/point或 中的等效项安装一个fstab。您的系统也有可能已经使用了/tmpusing tmpfs.

另一种选择是让保存明文密码的脚本连续运行,并sleep在适当的时间执行实际工作。但在这种情况下,如果脚本崩溃,它不会自动重新启动(并且您无论如何都需要手动输入密码才能重新启动它)。

请注意,无论如何,内存中的任何秘密都可能会被写出以进行交换(如果有的话)。 (出于这个原因,有理由使用加密交换。)

相关内容