Gpg шифровать файл без взаимодействия с клавиатурой

Я запускаю следующую команду внутри crontab для шифрования файла, и я не хочу, чтобы взаимодействие с клавиатурой

echo "PASSPHRASE" | gpg --passphrase-fd 0 -r USER --encrypt FILENAME.TXT

но у меня есть этот ответ:

gpg: C042XXXX: There is no assurance this key belongs to the named user

pub  40XXX/C042XXXX 2012-01-11 Name LastName. (comment) <[email protected]>
 Primary key fingerprint: XXXX XXXX XXXX XXXX XXXX  XXXX XXXX XXXX XXXX XXXX
      Subkey fingerprint: XXXX XXXX XXXX XXXX XXXX  XXXX XXXX XXXX XXXX XXXX

It is NOT certain that the key belongs to the person named
in the user ID.  If you *really* know what you are doing,
you may answer the next question with yes.

Use this key anyway? (y/N) 

Ответ 1

По словам Дэвида, проблема в том, что gpg не доверяет открытому ключу, который вы используете для шифрования. Вы могли бы подписать ключ, как он объяснил.

Альтернатива - особенно, если ключ может иногда меняться, - это привязать к --trust-model always к вашей команде gpg.

Здесь соответствующий бит с man-страницы:

--trust-model pgp|classic|direct|always|auto

     Set what trust model GnuPG should follow. The models are:

     pgp    This is the Web of Trust combined with trust signatures as used in
            PGP 5.x and later. This is the default trust model when creating a
            new trust database.

     classic
            This is the standard Web of Trust as used in PGP 2.x and earlier.

     direct Key validity is set directly by the user and  not  calculated  via
            the Web of Trust.

     always Skip  key  validation  and  assume that used keys are always fully
            trusted. You generally won't use this unless you  are  using  some
            external  validation  scheme.  This  option  also  suppresses  the
            "[uncertain]" tag printed with signature checks when there  is  no
            evidence that the user ID is bound to the key.

     auto   Select  the  trust  model depending on whatever the internal trust
            database says. This is  the  default  model  if  such  a  database
            already exists.

Ответ 2

Вот мое решение, основанное на gpg2 (но я уверен, вы можете применить аналогичную технику к gpg)

$ gpg2 --edit-key {recipient email address}  
> trust
> 5 (select 5 if you ultimately trust the key) 
> save

Это скажет gpg2 полностью доверять ключу, так что вы можете зашифровать без подсказки

Ответ 3

Подход к взлому:

echo -n PASSPHRASE > phrase
chmod 400 phrase #Make sure ONLY the user running the cron job can read the phrase
yes | gpg --passphrase-fd 3 --recipient USER --encrypt FILENAME.txt 3<phrase

Основная проблема заключается в том, что ключ, который у вас есть для USER, не подписан. Если вы доверяете этому, вы можете подписать его с помощью

gpg --edit-key USER sign

Вероятно, он задаст пару вопросов в зависимости от вашей конфигурации. Сделайте это один раз, тогда вам должно быть хорошо идти в ваш кронтаб. Я бы порекомендовал использовать предлагаемое мной решение, поместив кодовую фразу в отдельный файл и сделав его доступным только для одного пользователя, который запускает команду. Если вы это сделаете, вы можете убить yes | и просто иметь строку шифрования.

Ответ 4

Используйте эту команду, это поможет вам

echo "PASSPHRASE" | gpg --passphrase-fd 0 --always-trust -r USER --encrypt FILENAME.TX

Ответ 5

Я предполагаю, что, как и я, многие люди приходят сюда для части вопроса "без взаимодействия с клавиатурой". С gpg2 и gpg -a стало довольно сложно подписывать/шифровать/дешифровать вещи без какого-либо взаимодействия с клавиатурой. Вот как вы могли бы создать подпись, когда ваша незашифрованная фраза секретного ключа сохраняется в текстовом файле:

cat something_so_sign.xzy | gpg \
    --passphrase-file "plaintext_passphrase.txt" \
    --batch \
    --pinentry-mode loopback \
    -bsa

Измените -b -s -a в зависимости от ваших потребностей. Другие переключатели являются обязательными. Вы также можете просто использовать --passphrase 'SECRET'. Как уже указывалось, будьте осторожны с этим. Открытые текстовые файлы не намного лучше, конечно.

Ответ 6

Или подпишите ключ (после того, как вы, конечно же, определили отпечаток пальца):

gpg --sign-key <recipient email address>

После этого вы полностью доверяете ключу.

  1 = I don't know or won't say
  2 = I do NOT trust
  3 = I trust marginally
  4 = I trust fully
  5 = I trust ultimately

Ответ 7

Я тоже сталкивался с этим. Я не мог получить знак, чтобы сделать что-нибудь интересное. Вот что я сделал:

создайте ключ gpg:

gpg --gen-key

получить длинный ключ ID (результат находится в 5-м столбце):

gpg --list-keys --with-colon [email protected]

Добавьте надежную ключевую строку в ~/gnupg/gpg.conf

trusted-key 16DIGITALPHANUMERICKEYID

строка gpg в резервной копии script:

gpg -e -r [email protected] backup_file.tgz

Отладка cron: Я также собираю вывод cron dubugging, отправляя stdout и stderr в файл журнала в командной строке cron. Полезно знать

Ответ 8

enter image description here

Когда вы впервые создаете сертификат с помощью своего идентификатора электронной почты, выберите полностью доверенный сертификат, и тогда, когда вы зашифруете какой-либо файл, он не будет задавать вопрос типа.... для получения дополнительной информации откройте изображение в приведенной выше ссылке.

НЕ НУЖНО, чтобы ключ принадлежал человеку, указанному в ИД пользователя. Если вы действительно знаете, что делаете, вы можете ответить на следующий вопрос "да".

В любом случае использовать этот ключ? (Y/N)

Ответ 9

Другой подход: чтобы запретить доступ к конфиденциальным данным (вместо того, чтобы шифровать их с помощью сторонних ключей), я загружаю ТОЛЬКО * мой ** ПУБЛИЧНЫЙ ключ на сервер, на котором я хочу защитить данные, и использую этот ключ для шифрования. Это устраняет необходимость в интерактивной подсказке для ввода пароля, облегчающего автоматизацию, и, что лучше всего, ключ PRIVATE отделен от общедоступного сервера.

gpg --batch --yes --trust-model always -r $YOURPUBKEYEMAILADDRESS -e ./file.txt

Однако, если НЕ шифровать с помощью собственного открытого ключа, использование ключа --trust-model always немного затруднительно. Во всяком случае, другой способ решения проблемы отказа в доступе к данным. HTH- Терренс Хоулахан