GnuPG Shell脚本-拒绝读取密码

GnuPG Shell脚本-拒绝读取密码,shell,ubuntu,passwords,gnupg,Shell,Ubuntu,Passwords,Gnupg,下面的脚本曾经在MacOSX上运行,但是,由于将其移动到Ubuntu,它似乎根本无法读取密码文件。即使我从命令行运行它,无论我做什么,我都会得到一个弹出提示,询问密码。由于这将通过cron运行,我不希望发生这种情况。。。我希望它在没有提示的情况下从文件中读取密码。要注意的是,我确实尝试过使用passphrase fd和passphrase file,两者都不起作用 #!/bin/sh p=$(<pass.txt) set -- $p pass_phrase=$1 destination="

下面的脚本曾经在MacOSX上运行,但是,由于将其移动到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
#/垃圾箱/垃圾箱

p=$(您的问题可能是
$passphrase
为空。在Ubuntu上
sh
被符号链接到
dash
,它不理解
$(使用

作为您的第一行,而不是
#!/bin/sh

至于密码问题,您可能应该尝试使用一些自动机制。有关信息,请查看gpg文档。我不使用gpg,但您可以查看两个解决方案(第一个解决了我的问题;-)

  • gpg使用--passphrase fd not--passphrase

    echo yourpw | gpg--passphrase fd 0--output out.txt-d file.txt


您将收到密码提示,因为您设置了
DISPLAY
变量(如果单击“取消”,脚本将继续解密文件)。
DISPLAY
不应在cron环境中设置,因此您可能可以忽略它,但可以确保或能够从命令提示符add测试脚本

unset DISPLAY
返回到脚本的开头,或在执行之前运行它

此外,为了能够使用
$(似乎已损坏了
--passphrase file
选项。我不得不改用
--passphrase fd 0
,如下所示:

cat .password | gpg --passphrase-fd 0 --output foo --decrypt foo.gpg
添加
--archive
以从
--passphrase文件

读取密码您必须使用:

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

使用option--no Use agent。它不会提示您使用option--passphrase。

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

gpg --passphrase-fd 3 <your command here> 3< pass.txt
gpg——密码短语fd3
这项工作:

gpg --no-use-agent --batch --passphrase-file pass.txt --output kkkk.tar.bz2  --decrypt kkk-data.tar.bz2.gpg
使用下面的脚本

#! /bin/sh
gpg --pinentry-mode loopback --passphrase='PASSWORD' --output /output/outputFileName /input/inputFileName

是的,当-passphrase fd工作时,我也无法使--passphrase文件工作。它与
--no use agent--batch
一起工作。有趣的是,
--passphrase
在没有这两个选项的情况下工作。
#!/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
cat .password | gpg --passphrase-fd 0 --output foo --decrypt foo.gpg
gpg --batch --passphrase-fd 1 --passphrase-file your_password_file -c your_file_to_encript.txt
gpg --passphrase-fd 3 <your command here> 3< pass.txt
gpg --no-use-agent --batch --passphrase-file pass.txt --output kkkk.tar.bz2  --decrypt kkk-data.tar.bz2.gpg
#! /bin/sh
gpg --pinentry-mode loopback --passphrase='PASSWORD' --output /output/outputFileName /input/inputFileName