Jak korzystać z GnuPG z --passphrase?

11

Chcę napisać skrypt, który uruchomi gpgplik o nazwie „plik” z hasłem „test”.

Zwykle, kiedy używam gpg, zwykle po prostu biegam gpg -c filei prosi mnie o hasło. Ale ponieważ chcę, aby ten skrypt działał samodzielnie, chciałbym podać hasło jako część polecenia.

Teraz, gdy próbuję użyć gpg -c file --passphrase test:, wyświetla:

użycie: gpg [opcje] --symetryczny [nazwa pliku]

Których szwów chciałbym użyć gpg --passphrase test --symmetric file. Ale jeśli to zrobię, pojawi się okno dialogowe z prośbą o użycie hasła; co nie jest tym czego chcę.

Jak poprawnie skonfigurować argumenty?

Jens Erat
źródło

Odpowiedzi:

7

W GnuPG opcje muszą poprzedzać polecenia, dlatego --passphraseopcja musi być wcześniejsza --symmetric.

Jeśli chodzi o okno wprowadzania kodu PIN, które i tak wyskakuje (chociaż używasz --passphrase), prawdopodobnie już używasz GnuPG 2, który wymaga --batchużycia razem z --passphrase. Ze stron podręcznika:

--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.

Pamiętaj, że w systemach z wieloma użytkownikami wszyscy inni użytkownicy będą mogli odczytać twoją linię poleceń, a tym samym hasło podczas wykonywania GnuPG. Lepiej użyj jednej z pozostałych --passphrase-*opcji zamiast tego, aby odczytać z pliku lub potoku.

Jens Erat
źródło
Mówisz, że moja kolejność argumentów --passphrasei --symmetricargumentów była właściwie poprawna, ale brakowało mi tylko --batchargumentu? Ponieważ to nie działało dla mnie. Na --batchwszelki wypadek próbowałem dodać zarówno przed, jak i po. Nie wiem też, jak sprawdzić, czy korzystam z GPG 2, ale napisana przez ciebie część Note that this passphrase is only used if the option --batch has also been given.nie istnieje na mojej manstronie.
Jakiego systemu operacyjnego / dystrybucji używasz? gpg --versionpowinien podać informacje o używanej wersji GnuPG. Czy masz plik gpg2binarny?
Jens Erat,
Używam Xubuntu 14.04., Wersja gpgto 1.4.16. Zainspirowany twoimi komentarzami, dowiedziałem się, że gpg2 jest rozwijany osobno, więc zainstalowałem go i wypróbowałem, ale narzeka, żeno valid OpenPGP data found. processing message failed: Unknown system error
Jens, jesteś super niesamowity i odpowiadasz na wiele pytań ze świetnymi odpowiedziami, ale mylisz się w jednym punkcie: „opcje muszą poprzedzać polecenia, a więc opcja --passphrase musi występować przed - symetryczną”. Zupełnie nieprawda.
rsaw
@rsaw: Masz częściowo rację - --symmetrici --passphrasekolejność wydaje się nie mieć znaczenia, ale spróbuj --exportzdefiniować --armorpóźniej. Zasadniczo opcje muszą poprzedzać komendy, co jest także kolejnością zdefiniowaną na stronach podręcznika.
Jens Erat,
2

Jeśli gpg --versionraporty v2, musisz dodać --batchopcję.

W oparciu o dane wyjściowe składni prawdopodobnie używasz v1, w którym to przypadku chcesz:

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

Pamiętaj, że kolejność opcji nie jest ważna; jednak każdy plik musi być ostatnim argumentem.

rsaw
źródło
1

Użycie --pinentry-mode loopbackdziała z --passphrase& --passphrase-[file/fd]i pozwoli ci wprowadzić nowe informacje, na przykład w przypadku konfliktu nazw plików:

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

inaczej --batchto szybko zawiedzie, mówiąc...failed: File exists


Jeśli pierwotnie dodałeś -vnajpierw opcję verbose ( ), powinieneś zobaczyć coś takiego:

$ 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]

wskazując całkiem wyraźnie, że nie podobało mu się to, że na pierwszym miejscu było -c( --symmetric).


Uważam, że zachowanie gpg2 polegające na ignorowaniu --passphraseopcji, chyba że towarzyszy --batchtemu błąd.

Xen2050
źródło