【问题标题】:GnuPG Shell Script - Refuses to read passwordGnuPG Shell 脚本 - 拒绝读取密码
【发布时间】:2010-03-27 18:37:14
【问题描述】:

下面的脚本过去可以在 Mac OS X 上运行,但是,由于将其移至 Ubuntu,它似乎根本无法从密码文件中读取。即使我从命令行运行它,无论我做什么,我都会收到一个弹出提示,要求我输入密码。因为这将通过 cron 运行,所以我不希望这种情况发生......我希望它在没有提示的情况下从文件中读取密码。需要注意的是,我确实尝试过使用 passphrase-fd 和 passphrase-file,但两者都不起作用......

#!/bin/sh
p=$(<pass.txt)
set -- $p
pass_phrase=$1
destination="/var/www/decrypted"
cd /var/sl_bin/
for FILE in *.pgp;
do
    FILENAME=${FILE%.pgp}
    gpg --passphrase "$pass_phrase" --output "$destination/$FILENAME" --decrypt "$FILE"
    rm -f $FILE
done

【问题讨论】:

    标签: shell ubuntu passwords gnupg


    【解决方案1】:

    这行得通:

    gpg --no-use-agent --batch --passphrase-file pass.txt --output kkkk.tar.bz2  --decrypt kkk-data.tar.bz2.gpg
    

    【讨论】:

      【解决方案2】:

      --passphrase-file 选项似乎被破坏/不被尊重。我不得不改用--passphrase-fd 0,就像这样:

      cat .password | gpg --passphrase-fd 0 --output foo --decrypt foo.gpg
      

      【讨论】:

      • 是的,当 -passphrase-fd 工作时,我也无法让 --passphrase-file 工作。
      • 它与--no-use-agent --batch结合使用。有趣的是,--passphrase 在没有这两个选项的情况下也可以工作。
      【解决方案3】:

      使用选项--no-use-agent。它不会提示您使用选项 --passphrase

      【讨论】:

        【解决方案4】:

        如果您不想通过标准输入提供文件(例如,因为您要将其插入另一个命令,如 git,它希望提供内容以通过标准输入进行签名),那么您可以使用另一个文件描述符:

        gpg --passphrase-fd 3 <your command here> 3< pass.txt
        

        【讨论】:

          【解决方案5】:

          您的问题可能是$passphrase 为空。在 Ubuntu 上,sh 符号链接到 dash,它不像 Bash 那样理解 $(&lt;file_name)(但也不会发出错误)。

          您可以将 shebang 更改为:

          #!/bin/bash
          

          或使用$(cat pass.txt)

          另外,为什么不合并第二行、第三行和第四行?:pass_phrase=$(&lt;pass.txt)(或pass_phrase=($(&lt;pass.txt)),如果您想删除文件中除第一个“单词”之外的所有内容)。

          Your previous question

          【讨论】:

            【解决方案6】:

            使用

            #!/bin/bash
            

            #!/usr/bin/env bash
            

            作为你的第一行而不是#!/bin/sh

            至于您的密码短语问题,您可能应该尝试使用一些自动机制。检查 gpg 文档以获取信息。我不使用gpg,但你可以查看gpg-agent

            【讨论】:

              【解决方案7】:

              两个解决方案(第一个解决了我的问题;-))

              【讨论】:

                【解决方案8】:

                您收到密码提示是因为您设置了DISPLAY 变量(如果您单击取消,脚本将继续解密文件)。 DISPLAY 不应该在 cron 环境中设置,所以你可以忽略它,但要确保或能够从命令提示符添加测试脚本

                unset DISPLAY
                

                到脚本的开头或在执行之前运行它。

                还可以使用需要更改的$(&lt;file)语法

                #!/bin/sh
                

                #!/bin/bash
                

                您应该避免使用--passphrase 选项,这可能会导致在多用户系统上泄露您的密码。您可以改用--passphrase-file。以下是我将如何更改您的脚本:

                #!/bin/sh
                PASSFILE=$(pwd)/pass.txt
                destination="/var/www/decrypted"
                cd /var/sl_bin/
                for FILE in *.pgp;
                do
                    FILENAME=${FILE%.pgp}
                    gpg --passphrase-file $PASSFILE --output "$destination/$FILENAME" --decrypt "$FILE"
                    rm -f $FILE
                done
                

                为了在更改当前目录之前保存密码文件的位置,我将它保存在PASSFILE变量中。

                【讨论】:

                  【解决方案9】:

                  添加--archive--passphrase-file读取密码

                  【讨论】:

                    【解决方案10】:

                    你必须使用:

                    gpg --batch --passphrase-fd 1 --passphrase-file your_password_file -c your_file_to_encript.txt
                    

                    【讨论】:

                      【解决方案11】:

                      使用下面的脚本

                      #! /bin/sh
                      gpg --pinentry-mode loopback --passphrase='PASSWORD' --output /output/outputFileName /input/inputFileName
                      

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 2014-07-09
                        • 1970-01-01
                        • 1970-01-01
                        • 2018-07-20
                        • 1970-01-01
                        • 1970-01-01
                        • 2014-07-18
                        • 1970-01-01
                        相关资源
                        最近更新 更多