GnuPG Shell脚本 - 拒绝读取密码

时间:2010-03-27 18:37:15

标签: shell ubuntu passwords gnupg

下面的脚本曾经在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 个答案:

答案 0 :(得分:5)

这有效:

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

答案 1 :(得分:3)

--passphrase-file选项似乎已被破坏/未被尊重。我必须改为使用--passphrase-fd 0,如下所示:

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:0)

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

您可以将shebang更改为:

#!/bin/bash

或使用$(cat pass.txt)

另外,为什么不组合第二,第三和第四行?:pass_phrase=$(<pass.txt)(或pass_phrase=($(<pass.txt))如果你试图剥离文件中除第一个“单词”之外的所有内容。 / p>

Your previous question

答案 5 :(得分:0)

使用

#!/bin/bash

#!/usr/bin/env bash

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

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

答案 6 :(得分:0)

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

答案 7 :(得分: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变量中。

答案 8 :(得分:0)

添加--archive以从--passphrase-file

中读取密码

答案 9 :(得分:0)

您必须使用:

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

答案 10 :(得分:0)

使用以下脚本

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