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
4

11 回答 11

6

这有效:

gpg --no-use-agent --batch --passphrase-file pass.txt --output kkkk.tar.bz2  --decrypt kkk-data.tar.bz2.gpg
于 2015-03-19T13:20:31.537 回答
3

--passphrase-file选项似乎被破坏/不兑现。我不得不--passphrase-fd 0改用,像这样:

cat .password | gpg --passphrase-fd 0 --output foo --decrypt foo.gpg
于 2012-04-30T23:13:04.933 回答
2

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

于 2013-03-21T08:43:43.937 回答
2

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

gpg --passphrase-fd 3 <your command here> 3< pass.txt
于 2014-08-21T03:17:08.243 回答
0

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

于 2010-11-02T09:18:24.290 回答
0

利用

#!/bin/bash

或者

#!/usr/bin/env bash

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

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

于 2010-04-10T02:10:02.670 回答
0

添加--archive以读取密码--passphrase-file

于 2013-01-14T11:19:52.220 回答
0

您必须使用:

gpg --batch --passphrase-fd 1 --passphrase-file your_password_file -c your_file_to_encript.txt
于 2013-02-03T15:36:49.740 回答
0

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

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变量中。

于 2010-11-06T18:08:56.987 回答
0

你的问题可能$passphrase是空的。在 Ubuntush上,符号链接到dashwhich 与 Bash 的理解$(<file_name)方式不同(但也不会发出错误)。

您可以将 shebang 更改为:

#!/bin/bash

或使用$(cat pass.txt)

另外,为什么不合并第二行、第三行和第四行?pass_phrase=$(<pass.txt):(或者pass_phrase=($(<pass.txt))如果您试图删除文件中除第一个“单词”之外的所有内容)。

你之前的问题

于 2010-04-10T01:31:41.513 回答
0

使用下面的脚本

#! /bin/sh
gpg --pinentry-mode loopback --passphrase='PASSWORD' --output /output/outputFileName /input/inputFileName
于 2020-09-26T08:00:23.973 回答