gpg зашифрувати файл без взаємодії з клавіатурою [закрито]


84

Я запускаю наступну команду в 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) <user@email.com>
 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) 

Оскільки --passphrase-fd читає лише перший рядок ... що станеться, якщо ви запустите echo -e "PASSPHRASE" "\nyes" | gpg --passphrase-fd 0 -r USER --encrypt FILENAME.TXT?
Девід Коста

Сторінка кого-небудь? --batchі --yes.
u0b34a0f6ae

Відповіді:


76

Як нагадав Девід, проблема тут полягає в тому, що 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.

Не розумію, чому система вважає, що це код. Я клацнув на цитаті; не код. Під час редагування воно відображається лише як цитування (без кольору). Дивно.
rsaw

4
це тому, що текст використовує пробіли для вирівнювання.
Томаш Фейфар

це правильна відповідь для мене! дякую
eigenfield

46

Ось моє рішення, засноване на gpg2 (але я впевнений, що ви можете застосувати подібний прийом до gpg)

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

Це скаже gpg2 повністю довіряти ключу, щоб ви могли шифрувати без запиту


1
Це негайно оновлює trust-db, і збереження не потрібно.
провулки

12
Це встановлює довіру власника, а не дійсність ключа. Ultimate Trust - це лише ваші власні Ключі. тобто все, що підписано ідентифікацією, якій довіряють в кінцевому підсумку, обробляється так, як підписано вами самим. Тому НЕ ВСТАНОВЛЮЙТЕ ДОВІРУ НА УКРАЇНУ, якщо це не ваш ключ. Проблема полягає в дійсності ключа. Для вирішення / вирішення цього питання слід підписати ключ. (розглянемо лише місцевий підпис та перевірку відбитків пальців)
x539

3
x539 має рацію. після gpg2 --edit-key <key-id>того, як ви зробите lsignі save. Я думаю, що довіра 5 - неправильне використання для цього (неправильно зрозуміле), і (для мене) воно було навіть неефективним (марним), тому що сказано x539.
n611x007

Зверніть увагу, що це також працює для звичайних gpg, не тільки для gpg2:)
Маркуса,

10

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

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 |і просто мати рядок шифрування.


1
Я спробував метод key key, обидва gpg2 --edit-key USER знак, тепер він показує, що він підписаний, але все ще довіряю: невідомо. І партія все одно не буде працювати без підказки
nycynik

2
Я думаю, це lsignбула б краща ідея. Хіба це не так, якщо ви підписуєте тобто. локально підписати ключ, який залишається на вашому комп’ютері. Але якщо ви просто підпишете, це вважається загальнодоступним, і, отже, буде надіслано на сервери ключів, коли ви це зробите --send-keys?
n611x007

2

Використовуйте цю команду, вона вам допоможе

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

1

Я теж стикався з цим. Я не міг отримати ключ-знак, щоб зробити щось цікаве. Ось що я зробив:

створити ключ gpg:

gpg --gen-key

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

gpg --list-keys --with-colon name@domain.tld

Додайте надійний ключовий рядок до ~ / gnupg / gpg.conf

trusted-key 16DIGITALPHANUMERICKEYID

gpg-рядок у сценарії резервного копіювання:

gpg -e -r name@domain.tld backup_file.tgz

Налагодження cron: я також фіксую вихідні дані дублювання cron, надсилаючи stdout і stderr у файл журналу в командному рядку cron. Це корисно знати


1
Ні, не роби цього. Додавання trusted-keyрядка в gpg.confзаподіє , gpgщоб завжди довіряти , що ключ в повній мірі в якості одного зі своїх ключів користувача , який є поганою річчю . Передача --trusted-keyяк аргумент , і лише в цьому конкретному випадку є прийнятною (як передача --trust-model=alwaysтаким же чином ).
Blacklight Shining

Це мій ключ. Хіба не позначення його як довіреного саме те, що я хочу?
jorfus

1
Якщо це насправді ваш ключ, тоді так, позначте його як остаточно надійний (хоча я особисто вважаю за краще це робити, а --edit-keyне додаючи trusted-keyрядок). Запитувач не сказав, що скаржився це їхній власний ключ gpg.
Blacklight Shining

1

Я припускаю, що, як і я, багато людей приходять сюди для того, щоб відповісти на питання "без взаємодії з клавіатурою". З gpg2 та gpg-agent стало досить складно підписувати / шифрувати / розшифровувати речі без будь-якої взаємодії з клавіатурою. Ось як ви могли б створити підпис, коли ваша парольна фраза відкритого тексту зберігається у текстовому файлі:

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

Змінюйте -b -s -a залежно від ваших потреб. Інші вимикачі є обов’язковими. Ви також можете просто використовувати --passphrase 'SECRET'. Як уже зазначалося, будьте обережні з цим. Текстові файли з відкритим текстом, звичайно, не набагато кращі.


0

Або підпишіть ключ (звичайно, після того, як ви підтвердили свій відбиток):

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

5
Довіра власнику не має нічого спільного з цією проблемою. Встановлюйте довіру власника лише в тому випадку, якщо ви довіряєте йому щодо підписання / перевірки інших ключів та їх власників
x539

Ianes, чому б не відредагувати свою відповідь, щоб повідомити про довіру до ключів? Наразі це може ввести в оману ... Також --lsign-keyможе бути кращою ідеєю, ні? див. мій інший коментар щодо lsign
n611x007

0

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

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

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

Усе одно використовувати цей ключ? (р / н)


0

Інший підхід: щоб заборонити доступ до конфіденційних даних (а не шифрувати їх за допомогою сторонніх ключів), я завантажую ТІЛЬКИ * свій ** ПУБЛІЧНИЙ ключ на сервер, на якому я хочу захистити дані, і використовую цей ключ для шифрування. Це заперечує необхідність інтерактивного підказки для введення пароля, що полегшує автоматизацію, і найкраще, ключ PRIVATE - крім загальнодоступного сервера.

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.