Я хочу написать скрипт, который будет запускать 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 не является ошибкой, это было написано в документации.здесь: