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) 

person coto    schedule 27.02.2012    source источник
comment
Поскольку --passphrase-fd читает только первую строку... что произойдет, если вы запустите echo -e "PASSPHRASE" "\nyes" | gpg --passphrase-fd 0 -r USER --encrypt FILENAME.TXT ?   -  person David Costa    schedule 27.02.2012
comment
справочная страница кого-нибудь? --batch и --yes.   -  person u0b34a0f6ae    schedule 08.02.2013


Ответы (9)


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

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

Вот соответствующий бит со страницы руководства:

--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.
person rsaw    schedule 27.02.2012
comment
Не понимаю, почему система думает, что это код. Я нажал цитату; не код. При редактировании он отображается только в кавычках (без цвета). Странный. - person rsaw; 27.02.2012
comment
это потому, что текст использует пробелы для выравнивания. - person Tomáš Fejfar; 25.06.2013
comment
это правильный ответ для меня! благодарю вас - person eigenfield; 19.03.2018

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

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

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

person Antony    schedule 02.02.2013
comment
Это немедленно обновляет trust-db и не требует сохранения. - person lanes; 23.10.2013
comment
Это устанавливает доверие владельца, а не действительность ключа. Ultimate Trust предназначен только для ваших собственных ключей. т. е. все, что подписано Абсолютно доверенным удостоверением, обрабатывается как подписанное вами. Так что НЕ УСТАНАВЛИВАЙТЕ TRUST НА ULTIMATE, если это не ваш ключ. Проблема в ключевой валидности. Чтобы решить/обойти это, вы должны подписать ключ. (рассмотрите только локальную проверку подписи и отпечатков пальцев) - person x539; 26.07.2014
comment
х539 правильно. после gpg2 --edit-key <key-id> вы делаете lsign и save. Я думаю, что траст 5 для этого используется неправильно (неправильно понято), и (для меня) это было даже неэффективно (бесполезно), потому что сказал x539. - person n611x007; 19.01.2016
comment
Обратите внимание, что это также работает для обычного gpg, а не только для gpg2 :) - person Markus; 25.08.2020

Хакерский подход:

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

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

person David Souther    schedule 27.02.2012
comment
Я попробовал метод ключа подписи, оба знака USER gpg2 --edit-key, теперь он показывает, что он подписан, но все еще доверяет: неизвестно. И пакет по-прежнему не будет запускаться без подсказки - person nycynik; 22.08.2012
comment
Я думаю, что lsign было бы лучше. Разве это не так, если вы lsign т.е. локально подпишите ключ, этот знак останется на вашем компьютере. Но если вы просто подписываете, это считается общедоступным и, следовательно, будет отправлено на серверы ключей, когда вы выполните --send-keys ? - person n611x007; 19.01.2016

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

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

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

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

gpg --gen-key

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

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

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

trusted-key 16DIGITALPHANUMERICKEYID

строка gpg в скрипте резервного копирования:

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

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

person jorfus    schedule 15.06.2015
comment
Нет, не делай этого. Добавление строки trusted-key к gpg.conf заставит gpg всегда доверять этому ключу полностью, как одному из собственных ключей пользователя, что плохо. Передача --trusted-key в качестве аргумента и только в этом конкретном случае допустима (как и передача --trust-model=always таким же образом). - person Blacklight Shining; 13.12.2015
comment
Это мой ключ. Разве пометить его как доверенный не именно то, что я хочу? - person jorfus; 09.02.2016
comment
Если это на самом деле ваш ключ, то да, пометьте его как полностью доверенный (хотя лично я предпочитаю делать это с помощью --edit-key, а не путем добавления строки trusted-key). Спрашивающий не сказал, что gpg жаловался на их собственный ключ. - person Blacklight Shining; 11.02.2016

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

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

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

person LimeRed    schedule 16.04.2018

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

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
person lanes    schedule 23.10.2013
comment
Доверие к владельцу не имеет ничего общего с этой проблемой. Устанавливайте доверие владельца только в том случае, если вы доверяете ему в отношении подписи/проверки других ключей и их владельцев. - person x539; 26.07.2014
comment
Ян, почему бы не отредактировать свой ответ, чтобы обновить информацию о ключевом доверии? В настоящее время может ввести в заблуждение... Также --lsign-key может быть лучше, не так ли? см. другой мой комментарий о lsign - person n611x007; 19.01.2016

введите здесь описание изображения

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

НЕТ уверенности в том, что ключ принадлежит лицу, указанному в идентификаторе пользователя. Если вы действительно понимаете, что делаете, вы можете ответить утвердительно на следующий вопрос.

Все равно использовать этот ключ? (г/н)

person sumer raj    schedule 22.06.2018

Другой подход:

Это решение будет работать без участия пользователя.

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

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

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

person F1Linux    schedule 06.02.2019