GnuPG Shell Script - отказывается читать пароль - PullRequest
6 голосов
/ 27 марта 2010

Сценарий, приведенный ниже, работал для 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

Ответы [ 10 ]

5 голосов
/ 19 марта 2015

Это работает:

gpg --no-use-agent --batch --passphrase-file pass.txt --output kkkk.tar.bz2  --decrypt kkk-data.tar.bz2.gpg
3 голосов
/ 01 мая 2012

Опция --passphrase-file, похоже, не работает или не соблюдается. Вместо этого мне пришлось использовать --passphrase-fd 0, вот так:

cat .password | gpg --passphrase-fd 0 --output foo --decrypt foo.gpg
2 голосов
/ 21 августа 2014

Если вы не хотите передавать файл через стандартный ввод (например, потому что вы подключаете его к другой команде, такой как git, которая хочет предоставить контент для подписи через стандартный ввод), тогда вы можете использовать другой файл дескриптор:

gpg --passphrase-fd 3 <your command here> 3< pass.txt
2 голосов
/ 21 марта 2013

Использовать опцию - без использования агента . Вам не будет предложено использовать опцию - пароль .

0 голосов
/ 03 февраля 2013

Вы должны использовать:

gpg --batch --passphrase-fd 1 --passphrase-file your_password_file -c your_file_to_encript.txt
0 голосов
/ 14 января 2013

добавить --archive, чтобы прочитать пароль от --passphrase-file

0 голосов
/ 06 ноября 2010

Вы получаете запрос пароля, потому что у вас установлена ​​переменная DISPLAY (если вы нажмете кнопку Отмена, скрипт продолжит расшифровку файлов). DISPLAY не следует устанавливать в среде cron, так что вы, вероятно, можете ее игнорировать, но для уверенности или возможности протестировать скрипт из командной строки добавьте

unset DISPLAY

к началу скрипта или запустите его перед выполнением.

Также, чтобы иметь возможность использовать синтаксис $(<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.

0 голосов
/ 02 ноября 2010

Два решения (первое решило мою проблему; -))

0 голосов
/ 10 апреля 2010

использование

#!/bin/bash

или

#!/usr/bin/env bash

как первая строка вместо #!/bin/sh

Что касается проблемы с парольной фразой, вам, вероятно, следует попробовать использовать какой-то автоматический механизм. проверьте документацию gpg для информации. Я не использую gpg, но вы можете проверить gpg-agent.

0 голосов
/ 10 апреля 2010

Ваша проблема, вероятно, в том, что $passphrase равно нулю. В Ubuntu sh имеет символическую ссылку на dash, которая не понимает $(<file_name) так же, как Bash (но также не выдает ошибку).

Вы можете изменить свой шебанг на:

#!/bin/bash

или используйте $(cat pass.txt)

Кроме того, почему бы не объединить вторую, третью и четвертую строки ?: pass_phrase=$(<pass.txt) (или pass_phrase=($(<pass.txt)), если вы пытаетесь удалить все, кроме первого «слова» в файле).

Ваш предыдущий вопрос

...