2015-04-27 2 views
0

У меня есть скрипт, который выполняет команду шифрования gpg в сценарии sh через cronjob. Это часть моего сценариявыполнить команду шифрования gpg через cronjob

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} 

где реж =/USR/бен/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 
+0

Необходимо напечатать сообщение об ошибке. Если вы отбрасываете выход в любом месте ('2>/dev/null или аналогичный), удалите его.Выполняется ли cronjob с использованием того же пользователя, который вы проверили вручную? –

+0

Да, я выполнил cron с тем же пользователем, я попробовал новый код Java, чтобы сделать то же самое и получил сообщение об ошибке, поскольку открытый ключ не найден. –

+0

Вы действительно уверены, что выполняете работу cron под тем же самым пользователем? Что произойдет, если вы запустите 'echo $ USER'? Похоже, GnuPG пытается найти ключ в домашнем каталоге GnuPG другого пользователя. '--home-dir dir' будет использовать некоторую подпапку' dir' в домашнем каталоге пользователя, лучше дать абсолютный путь. Также не забывайте следить за разрешениями при использовании '--homedir'. –

ответ

0

если

 the echo $USER prints as root when executed on cronjob and as 
     username when executed manually 

Затем вам необходимо войти в систему как пользователь и использовать такие команды, как «кронтаб -e», чтобы добавить cronjob для этого пользователя для запуска сценария

+0

Если у нас нет привилегий, чтобы добавить кронтаб через нашего пользователя, тогда? –

+0

У вас, видимо, есть privilleges, чтобы добавить корень crontab, поэтому я удивлен, что вы не можете добавить crontab для своего пользователя. Если вы действительно не можете это сделать, обратитесь к системному администратору – Vorsprung

+0

, должен ли я добавить --batch в команду сейчас? –

1

GnuPG управляет отдельными брелоков и «домашние каталоги GnuPG "для каждого пользователя. Проблема с сообщением при вызове GnuPG из веб-служб или cronjobs выполняет их как другого пользователя.

Это означает, что GnuPG другого пользователя ищет ключи в неправильном ключевом кольце (домашний каталог), и если он исправлен, он не должен иметь прав доступа к домашнему каталогу GnuPG вообще (не проблема при запуске cron или веб-сервером как root, но это не должно быть сделано для этой цели из первых рук).

Существуют различные способы смягчить проблему:

  • Запуск веб-сервера или хрон работу под другим пользователем. Это может быть жизнеспособным решением для рабочих мест cron, но, скорее всего, не для веб-служб. sudo или su может помочь при запуске GnuPG в качестве другого пользователя.
  • Импорт требуется (частный/государственный) ключи к другому пользователю GnuPG домашней директории, например, путем включения в www-data или root пользователь (или как там оно называется на вашем компьютере).
  • Изменение поведения GnuPG для использования домашней директории другого пользователя. Вы можете сделать это с помощью --home-dir /home/[username]/.gnupg или короче --home-dir ~username/.gnupg, если ваша раковина разрешает короткую руку. Лучше не делайте этого, так как GnuPG очень строг при проверке прав доступа и отказывается работать, если они слишком расслаблены. GnuPG не любит разрешения, позволяющие другим пользователям, кроме владельца, получить доступ к домашнему каталогу GnuPG вообще, по уважительным причинам.
  • Изменение поведения GnuPG для использования полностью несвязанной папки в качестве домашнего каталога, например, где-то ваше приложение хранит данные в любом случае. Обычно это лучшее решение. Обязательно настройте владельца и права доступа. Примером может служить опция --home-dir /var/lib/foo-product/gnupg.
+0

мы можем экспортировать наш открытый ключ всем пользователям на сервере? –

+0

Конечно - просто пройти через все из них, просто требуется несколько строк сценариев. Но необходимость делать это не кажется надежным решением. Вам нужно запустить его у нескольких пользователей? Если это так, лучше хранить ключ на жестком диске и 'gpg --import' перед его использованием (реимпорт не нарушает ничего, если ключ уже существует). –