我有一个脚本,它通过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服务,这很可能不是。sudosu可能有助于以另一个用户身份运行GnuPG。
将所需的(私有/公共)密钥导入其他用户的GnuPG主目录,例如切换到www-dataroot用户(或在您的计算机上调用的任何用户)。
将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/

10-13 07:03