下面的脚本曾经在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
答案 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>
答案 5 :(得分:0)
使用
#!/bin/bash
或
#!/usr/bin/env bash
作为您的第一行,而不是#!/bin/sh
至于你的短语问题,你应该尝试使用一些自动机制。查看gpg文档以获取信息。我不使用gpg,但您可以查看gpg-agent
。
答案 6 :(得分:0)
两个解决方案(第一个解决了我的问题; - ))
gpg使用--passphrase-fd而不是--passphrase
echo yourpw | gpg --passphrase-fd 0 --output out.txt -d file.txt
答案 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