我有一个脚本,它通过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
字符串
echo $?给出的值为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
型
2条答案
按热度按时间olhwl3o21#
GnuPG为每个用户管理单独的密钥环和“GnuPG主目录”。从Web服务或cronjobs调用GnuPG时的一个常见问题是以另一个用户的身份执行它们。
这意味着另一个用户的GnuPG确实在错误的密钥环(主目录)中查找密钥,如果这个问题得到解决,它就不应该有访问GnuPG主目录的权限(当以root身份运行cron或Web服务器时,这不是一个问题,但由于这个原因,不应该这样做)。
有不同的方法可以缓解这个问题:
***在另一个用户下运行Web服务器或cron作业。**这可能是cron作业的可行解决方案,但很可能不适用于Web服务。
sudo
或su
可能有助于以其他用户身份运行GnuPG。*将所需的(私有/公共)密钥导入到其他用户的GnuPG主目录,例如切换到
www-data
或root
用户(或您机器上的任何名称)。***更改GnuPG的行为以使用 * 另一个用户的 * 主目录。**如果你的shell解决了短柄问题,你可以使用
--home-dir /home/[username]/.gnupg
或更短的--home-dir ~username/.gnupg
来这样做。最好不要这样做,因为GnuPG在验证访问权限方面非常严格,如果这些权限过于宽松,则拒绝工作。GnuPG根本不喜欢允许所有者以外的其他用户访问GnuPG主目录的权限,这是有充分理由的。*更改GnuPG的行为,使用 * 一个完全不相关的文件夹 * 作为主目录,例如您的应用程序存储数据的地方。通常是最好的解决方案。请确保适当地设置所有者和访问权限。一个例子是选项
--home-dir /var/lib/foo-product/gnupg
。0g0grzrc2#
如果
字符串
然后,您需要以用户身份登录,并使用“crontab -e”之类的命令为该用户添加一个cronjob以运行脚本