代码之家  ›  专栏  ›  技术社区  ›  Marcin

如何从cron运行的脚本运行gpg?

  •  26
  • Marcin  · 技术社区  · 17 年前

    for file in `ls *.tar.gz`; do
      echo encrypting $file
      gpg --passphrase-file /home/$USER/.gnupg/backup-passphrase \
        --simple-sk-checksum -c  $file
    done
    

    由于某种原因,如果我手动运行这个脚本,它工作得非常好,并且所有文件都是加密的。如果我把它作为cron作业运行, echo $file

    有什么线索吗?

    7 回复  |  直到 17 年前
        1
  •  24
  •   Marcin    17 年前

    事实证明,答案比我想象的要简单。有一个 --batch 参数丢失,gpg尝试从cron作业不存在的/dev/tty中读取。调试我使用的 --exit-on-status-write-error 帕拉姆。但使用它,我受到了退出状态2的启发,通过回声报告 $? 正如裁谈会主席建议的那样。

        2
  •  7
  •   Community Mohan Dere    6 年前

    gpg:无默认密钥:无密钥

    所以我补充说 --homedir /root/.gnupg . 最后的命令可以是

    echo“password”| gpg-vvv--homedir/root/.gnupg--batch--passphrase fd 0 --输出/usr/share/file.gpg--encrypt--sign/usr/share/file.tar.bz2

        3
  •  1
  •   Grey Panther    17 年前

    which gpg )并使用完整路径运行它(例如 /usr/bin/gpp... ).

    其他一些调试提示:

    • 输出 $? 在运行GPG之后(如下所示:echo“$?”)。这将为您提供退出代码,如果成功,该代码应为0
    • 将STDERR重定向到STDOUT for GPG,然后将STDOUT重定向到一个文件,以检查可能打印的任何错误消息(您可以通过命令行执行此操作: /usr/bin/gpg ... 2>&1 >> gpg.log
        4
  •  0
  •   Nick Berardi    17 年前

    确保运行cron作业的用户具有加密文件所需的权限。

        5
  •  0
  •   skinp    17 年前

    我曾经遇到过这个问题。

    实际上,我必须导出好的路径,以便我的程序能够很好地执行。 gpg至少在尝试执行吗?

    也许试着执行一个命令 echo whereis gpg echo $PATH

        6
  •  0
  •   dr-jan    17 年前

    @skinpcron作业由sh执行,而大多数现代unix使用bash或ksh进行交互式登录。根据我的经验,最大的问题是sh不理解以下内容:

    export PS1='\u@\h:\w> '
    

    需要更改为:

    PS1='\u@\h:\w> '
    export PS1
    

    因此,如果cron运行一个shell脚本,该脚本使用第一个语法定义了一个环境变量,那么在运行其他命令之前,另一个命令将永远不会执行,因为sh尝试定义该变量。

        7
  •  0
  •   Mike Lapinskas    8 年前

    在我的例子中:“gpg:解密失败:会话密钥错误”。

    尝试添加/usr/bin/gpg、检查版本、设置--batch、设置--home(使用/root/.gnupg和/home/user/.gnupg),但所有操作均无效。

    /usr/bin/gpg -d --batch --homedir /home/ec2-user/.gnupg --no-mdc-warning -quiet --passphrase "$GPG_PP" "$file"
    

    0 15 * * * $(source /opt/elasticbeanstalk/support/envvars && /home/ec2-user/bin/script.sh >> /home/ec2-user/logs/cron_out.log 2>&1)