GnuPG Shell脚本 - 拒绝读取密码

7
以下脚本在Mac OS X上曾经可以运行,但是自从迁移到Ubuntu后,似乎根本没有从密码文件中读取任何内容。即使我从命令行运行它,无论我做什么,都会弹出提示框要求我输入密码。由于这将通过cron运行,我不希望发生这种情况...我希望它可以从文件中读取密码而无需提示。需要注意的是,我确实尝试使用了passphrase-fd和passphrase-file,但都没有起作用...
#!/bin/sh
p=$(<pass.txt)
set -- $p
pass_phrase=$1
destination="/var/www/decrypted"
cd /var/sl_bin/
for FILE in *.pgp;
do
    FILENAME=${FILE%.pgp}
    gpg --passphrase "$pass_phrase" --output "$destination/$FILENAME" --decrypt "$FILE"
    rm -f $FILE
done
11个回答

6

这是有效的:

gpg --no-use-agent --batch --passphrase-file pass.txt --output kkkk.tar.bz2  --decrypt kkk-data.tar.bz2.gpg

3

--passphrase-file 选项似乎有问题/无效。我不得不使用 --passphrase-fd 0 替代,像这样:

cat .password | gpg --passphrase-fd 0 --output foo --decrypt foo.gpg

是的,我也无法让“--passphrase-file”正常工作,但“-passphrase-fd”可以。 - Zitrax
它与 --no-use-agent --batch 结合使用可以正常工作。有趣的是,--passphrase 可以在没有这两个选项的情况下工作。 - Alexander Shcheblikin

2
使用选项--no-use-agent,它不会提示您使用选项--passphrase

2

如果您不想通过标准输入提供文件(例如,因为您正在将其插入到像git这样的另一个命令中,该命令希望通过标准输入提供要签名的内容),那么您可以使用另一个文件描述符:

gpg --passphrase-fd 3 <your command here> 3< pass.txt

0

你之所以会收到密码提示,是因为你设置了DISPLAY变量(如果你点击取消,脚本将继续解密文件)。在cron环境中不应该设置DISPLAY,所以你可以忽略它,但为了确保或能够从命令提示符测试脚本,请添加以下内容:

unset DISPLAY

回到脚本的开头或在执行之前运行它。

另外,要能够使用$(<file)语法,您需要进行更改。

#!/bin/sh

#!/bin/bash

您应该避免使用--passphrase选项,因为这可能会在多用户系统中泄露您的密码。相反,您可以使用--passphrase-file选项。以下是我如何更改您的脚本:

#!/bin/sh
PASSFILE=$(pwd)/pass.txt
destination="/var/www/decrypted"
cd /var/sl_bin/
for FILE in *.pgp;
do
    FILENAME=${FILE%.pgp}
    gpg --passphrase-file $PASSFILE --output "$destination/$FILENAME" --decrypt "$FILE"
    rm -f $FILE
done

为了在更改当前目录之前保存密码文件的位置,我将其保存在PASSFILE变量中。


0

你的问题可能是$passphrase为空。在Ubuntu上,sh被链接到dash,它不像Bash那样理解$(<file_name)(但也不会发出错误)。

你可以将shebang更改为:

#!/bin/bash

或者使用$(cat pass.txt)

另外,为什么不将第二、第三和第四行合并起来呢?:pass_phrase=$(<pass.txt)(如果你想要去掉文件中除了第一个“单词”以外的所有内容,则可以使用pass_phrase=($(<pass.txt)))。

你之前的问题


0

使用

#!/bin/bash

或者

#!/usr/bin/env bash

在编程中,你应该使用 #!/bin/sh 之类的代码作为你的第一行。

至于你的密码问题,你可能应该尝试使用一些自动机制。查看 gpg 文档以获取更多信息。我不使用 gpg,但你可以查看 gpg-agent


0

在命令中添加--archive,以从--passphrase-file读取密码


0

你必须使用:

gpg --batch --passphrase-fd 1 --passphrase-file your_password_file -c your_file_to_encript.txt

0

两个解决方案(第一个解决了我的问题 ;-))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接