![Shell脚本:解密加密的密码并将其存储在变量中](https://linux22.com/image/149532/Shell%E8%84%9A%E6%9C%AC%EF%BC%9A%E8%A7%A3%E5%AF%86%E5%8A%A0%E5%AF%86%E7%9A%84%E5%AF%86%E7%A0%81%E5%B9%B6%E5%B0%86%E5%85%B6%E5%AD%98%E5%82%A8%E5%9C%A8%E5%8F%98%E9%87%8F%E4%B8%AD.png)
我有一个文件“credential.txt”,其中包含 mysql 的密码。我有另一个脚本调用此文本文件并从中检索密码。出于安全考虑,我不想直接存储密码。为此,我使用 Triple-DES Cipher 加密对文件进行了加密:
openssl des3 -salt -in credential.txt -out credential.des3
现在,从我的 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
。您的系统也有可能已经使用了/tmp
using tmpfs
.
另一种选择是让保存明文密码的脚本连续运行,并sleep
在适当的时间执行实际工作。但在这种情况下,如果脚本崩溃,它不会自动重新启动(并且您无论如何都需要手动输入密码才能重新启动它)。
请注意,无论如何,内存中的任何秘密都可能会被写出以进行交换(如果有的话)。 (出于这个原因,有理由使用加密交换。)