无需明确提供密码即可在 Bash 脚本中进行文件加密

无需明确提供密码即可在 Bash 脚本中进行文件加密

我想使以下手动过程自动化。

目前,我正在使用 openssl 加密一组文件,如下所示:

在 CBC 模式下使用 256 位 AES 将 file.txt 加密为 file.out

$ openssl enc -aes-256-cbc -salt -in 文件1 -out 文件1.enc

然后系统会提示我输入密码,然后使用该密码加密文件

解密时,我输入

$ openssl enc -d -aes-256-cbc -in 文件1.enc -out 文件

然后系统提示我输入密码 - 我再次手动输入。

我想自动化这个加密/解密过程 - 所以我需要找到一种向 openssh 提供密码的方法。

我的第一个想法是,是否有可能从文件中读取密码?或者有更好的方法吗?

另外,我想我必须限制谁可以查看密码文件 - 否则,这将违背使用密码的整个目的。我正在考虑以特定用户身份运行 bash 脚本,然后仅授予该用户对该文件内容的读取权限。

这就是完成的方法吗?或者有更好的方法吗?

当然,所有这些都引出了另一个问题 - 即如何以另一个用户的身份运行 bash 脚本 - 而不必在终端上输入用户密码......?

顺便说一句,我在 Linux Ubuntu 10.0.4 上运行

答案1

阅读man openssl(尤其是密码短语参数):

Several commands accept password arguments, typically using -passin 
and -passout for input and output passwords respectively. These allow
the password to be obtained from a variety of sources. Both of these
options take a single argument whose format is described below. If no
password argument is given and a password is required then the user is
prompted to enter one: this will typically be read from the current
terminal with echoing turned off.

   pass:password
             the actual password is password. Since the password is visible
             to utilities (like 'ps' under Unix) this form
             should only be used where security is not important.

   env:var   obtain the password from the environment variable var. Since 
             the environment of other processes is visible on
             certain platforms (e.g. ps under certain Unix OSes)
             this option should be used with caution.

   file:pathname
             the first line of pathname is the password. If the same 
             pathname argument is supplied to -passin and -passout
             arguments then the first line will be used for the input 
             password and the next line for the output password.
             pathname need not refer to a regular file: it could for 
             example refer to a device or named pipe.

   fd:number read the password from the file descriptor number. This 
             can be used to send the data via a pipe for example.

   stdin     read the password from standard input.

openssl enc接受-pass <arg>...因此,从上面给出的列表中选择你的参数。例如:

 echo -n "secret" | openssl enc -aes-256-cbc -salt \
        -in file1 -out file1.enc \
        -pass stdin

相关内容