Как использовать GnuPG с --passphrase?

Как использовать GnuPG с --passphrase?

Я хочу написать скрипт, который будет запускать gpgфайл с именем «file» с парольной фразой «test».

Обычно, когда я использую gpg, я просто запускаю gpg -c fileи он запрашивает у меня пароль. Но поскольку я хочу, чтобы этот скрипт делал все сам, я хотел бы предоставить пароль как часть команды.

Теперь, когда я пытаюсь использовать:, gpg -c file --passphrase testвыводится:

использование: gpg [опции] --symmetric [имя файла]

Что выглядит так, будто он хочет, чтобы я использовал gpg --passphrase test --symmetric file. Но если я это сделаю, появится диалоговое окно с просьбой ввести парольную фразу для использования; а это не то, что мне нужно.

Как правильно сформулировать аргументы?

решение1

В GnuPG параметры должны предшествовать командам, поэтому --passphraseпараметр должен располагаться перед --symmetric.

Что касается окна ввода пин-кода, которое всплывает в любом случае (хотя вы используете --passphrase), вы, вероятно, уже используете GnuPG 2, который требуется --batchиспользовать вместе с --passphrase. Из страниц руководства:

--passphrase string
    Use string as the passphrase. This can only be used if only one
    passphrase is supplied. Obviously, this is of very questionable
    security on a multi-user system. Don't  use this option if you
    can avoid it.  Note that this passphrase is only used if the
    option --batch has also been given.  This is different from
    GnuPG version 1.x.

Имейте в виду, что в многопользовательских системах все остальные пользователи смогут прочитать вашу командную строку, а значит и парольную фразу, пока выполняется GnuPG. Лучше использовать один из других --passphrase-*вариантов вместо чтения из файла или канала.

решение2

Использование --pinentry-mode loopbackработает с --passphrase& --passphrase-[file/fd]и позволит вам ввести новую информацию, например, в случае конфликта имен файлов:

File 'xyz.gpg' exists. Overwrite? (y/N)n
Enter new filename: xyz2.gpg

в отличие от --batchэтого быстро выйдет из строя, говоря...failed: File exists


Если бы вы изначально добавили подробный вариант ( -v), вы бы увидели что-то вроде:

$ gpg -v -c file --pinentry-mode loopback --passphrase-file=passfile
gpg: Note: '--pinentry-mode' is not considered an option
gpg: Note: '--passphrase-file=passfile' is not considered an option
usage: gpg [options] --symmetric [filename]

довольно ясно показывая, что ему что-то не понравилось в размещении -c( --symmetric) на первом месте.


Я считаю, что поведение gpg2, при котором --passphraseпараметры игнорируются, если они не сопровождаются , --batchявляется ошибкой.

решение3

Если gpg --versionотчеты v2, вам необходимо добавить эту --batchопцию.

Судя по синтаксису вывода, вы, вероятно, используете v1, в этом случае вам нужно:

gpg --passphrase PASS -c --no-use-agent FILE

Обратите внимание, что порядок параметров не важен; однако любой файл должен быть последним аргументом.

решение4

Вы можете использовать его так:

gpg --passphrase hello -c --no-symkey-cache --cipher-algo AES256 --batch basic.c

Также использование batch не является ошибкой, это было написано в документации.здесь:

скриншот из документов

Связанный контент