我有一个脚本,它通过cronjob在sh脚本中执行gpg加密命令。
这是我剧本的一部分
do
gpg --batch --no-tty --yes --recipient $Key --output $Outputdir/${v}.pgp --encrypt ${v}
echo "$?"
if ["$?" -eq 0 ];
then
mv $Inputdir/${v} $Readydir/
echo "file moved"
else
echo "error in encryption"
fi
done
回声$?值为2。
也试过吼叫命令
gpg --batch --home-dir dir --recipient $Key --output $Outputdir/${v}.pgp --encrypt ${v}
其中dir=/usr/bin/gpg
我的完整剧本
#set -x
PT=/gonm1_apps/xfb/ref/phoenix_drop
Inputdir=`grep Inputdir ${PT}/param.cfg | cut -d "=" -f2`
Outputdir=`grep Outputdir ${PT}/param.cfg | cut -d "=" -f2`
Key=`grep Key ${PT}/param.cfg | cut -d "=" -f2`
Readydir=`grep Readydir ${PT}/param.cfg | cut -d "=" -f2`
echo $USER
if [ "$(ls -la $Inputdir | grep -E 'S*.DAT')" ]; then
echo "Take action $Inputdir is not Empty"
cd $Inputdir
for v in `ls SID_090_*`
do
gpg --recipient $Key --output $Outputdir/${v}.pgp --encrypt ${v}
echo "$?"
if ["$?" -eq 0 ];
then
mv $Inputdir/${v} $Readydir/
echo "file moved"
else
echo "error in encryption"
fi
done
cd ${PT}
else
echo "$Inputdir is Empty"
fi
最佳答案
GnuPG管理每个用户的单独密钥环和“GnuPG主目录”。当从web服务或cronjobs调用GnuPG时,commmon问题是作为另一个用户执行它们。
这意味着另一个用户的GnuPG确实在错误的密钥环(home directory)中查找密钥,如果修复了这个问题,那么它根本就不应该拥有对GnuPG home directory的访问权限(在以根用户身份运行cron或web服务器时这不是一个问题,但由于这个原因,不应该直接这样做)。
有不同的方法可以缓解这个问题:
在另一个用户下运行web服务器或cron作业。对于cron作业,这可能是一个可行的解决方案,但对于web服务,这很可能不是。sudo
或su
可能有助于以另一个用户身份运行GnuPG。
将所需的(私有/公共)密钥导入其他用户的GnuPG主目录,例如切换到www-data
或root
用户(或在您的计算机上调用的任何用户)。
将GnuPG的行为更改为使用其他用户的主目录。如果您的外壳解决了短手问题,您可以使用--home-dir /home/[username]/.gnupg
或shorter--home-dir ~username/.gnupg
来完成此操作。最好不要这样做,因为GnuPG在验证访问权限方面非常严格,如果这些权限过于宽松,则拒绝工作。GnuPG不喜欢允许其他用户(但所有者)访问GnuPG主目录的权限,这是有充分理由的。
将GnuPG的行为更改为使用完全不相关的文件夹作为主目录,例如在应用程序存储数据的某个地方。通常,最好的解决方案。请确保正确设置所有者和访问权限。例如,选项--home-dir /var/lib/foo-product/gnupg
。
关于linux - 通过cronjob运行gpg加密命令,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29892527/