gpg szyfruje plik bez interakcji z klawiaturą [zamknięte]


84

Wykonuję następne polecenie w tabeli crontab, aby zaszyfrować plik i nie chcę interakcji z klawiaturą

echo "PASSPHRASE" | gpg --passphrase-fd 0 -r USER --encrypt FILENAME.TXT

ale mam taką odpowiedź:

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) 

Ponieważ --passphrase-fd czyta tylko pierwszą linię ... co się stanie, jeśli uruchomisz echo -e "PASSPHRASE" "\nyes" | gpg --passphrase-fd 0 -r USER --encrypt FILENAME.TXT?
David Costa,

ktoś ma stronę podręcznika? --batchi --yes.
u0b34a0f6ae

Odpowiedzi:


76

Jak dał do zrozumienia David, problem polega na tym, że gpg nie ufa kluczowi publicznemu, którego używasz do szyfrowania. Możesz podpisać klucz, jak wyjaśnił.

Alternatywą - zwłaszcza jeśli klucz może się od czasu do czasu zmieniać - byłoby przypięcie --trust-model always do polecenia gpg.

Oto odpowiedni fragment ze strony podręcznika:

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

Nie rozumiem, dlaczego system uważa, że ​​to kod. Kliknąłem cytat; nie kod. Podczas edycji pojawia się tylko w cudzysłowie (bez koloru). Dziwne.
rsaw

4
Dzieje się tak, ponieważ tekst używa spacji do wyrównania.
Tomáš Fejfar

to jest dla mnie poprawna odpowiedź! dziękuję
eigenfield

46

Oto moje rozwiązanie oparte na gpg2 (ale założę się, że możesz zastosować podobną technikę do gpg)

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

To powie gpg2, aby w pełni zaufać kluczowi, abyś mógł szyfrować bez pytania


1
Powoduje to natychmiastową aktualizację trust-db i nie jest wymagane zapisywanie.
pasy

12
To ustawia zaufanie właściciela, a nie ważność klucza. Ultimate Trust dotyczy tylko twoich własnych kluczy. tj. wszystko podpisane przez Ostatecznie Zaufaną Tożsamość jest traktowane jako podpisane przez Ciebie. Więc NIE NALEŻY NASTAWIAĆ ZAUFANIA NAJWYŻSZEGO, jeśli to nie jest twój klucz. Problemem jest ważność klucza. Aby rozwiązać / obejść ten problem, należy podpisać klucz. (
weź

3
x539 ma rację. po gpg2 --edit-key <key-id>wykonaniu lsigni save. Myślę, że zaufanie 5 jest niewłaściwe do tego (niezrozumiane) i (dla mnie) było nawet nieskuteczne (bezużyteczne), ponieważ powiedział x539.
n611x007

Zauważ, że działa to również w normalnych warunkach gpg, nie tylko gpg2:)
Markus

10

Podejście hakerskie:

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

Podstawowy problem polega na tym, że klucz, który masz dla USER, nie jest podpisany. Jeśli jej ufasz, możesz to podpisać

gpg --edit-key USER sign

Prawdopodobnie zada kilka pytań, w zależności od twojej konfiguracji. Zrób to raz, wtedy powinieneś być dobry w swoim crontabie. Nadal zalecałbym skorzystanie z rozwiązania, które zaproponowałem, umieszczając hasło w osobnym pliku i umożliwiając odczytanie go tylko przez jednego użytkownika, którego polecenie działa jako. Jeśli to zrobisz, możesz zabić yes |i po prostu mieć linię szyfrowania.


1
Wypróbowałem metodę klucza ze znakiem, oba znaki gpg2 --edit-key USER, teraz pokazuje, że jest podpisany, ale nadal ufam: nieznany. A partia nadal nie uruchomi się bez podpowiedzi
nycynik

2
Myślę, że lsignbyłby to lepszy pomysł. Czy nie jest tak, że jeśli podpiszesz np. podpisz klucz lokalnie, ten znak pozostanie na twoim komputerze. Ale jeśli po prostu podpiszesz, zostanie to uznane za publiczne, a zatem zostanie wysłane do serwerów kluczy, gdy wykonasz polecenie --send-keys?
n611x007

2

Użyj tego polecenia, to ci pomoże

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

1

Ja też w to wpadałem. Nie mogłem zdobyć klucza do podpisu, żeby zrobić coś interesującego. Oto co zrobiłem:

utwórz klucz gpg:

gpg --gen-key

pobierz długi identyfikator klucza (wynik znajduje się w piątej kolumnie):

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

Dodaj linię zaufanego klucza do ~ / gnupg / gpg.conf

trusted-key 16DIGITALPHANUMERICKEYID

gpg w skrypcie kopii zapasowej:

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

Debugowanie crona: przechwytuję również dane wyjściowe dubugowania cron, wysyłając stdout i stderr do pliku dziennika w wierszu poleceń cron. Warto wiedzieć


1
Nie, nie rób tego. Dodanie trusted-keylinię gpg.confspowoduje gpgaby zawsze zaufać ten klucz jako całości jako jeden z klawiszy własnych użytkownika , co jest złe . Przekazywanie --trusted-keyjako argument i tylko w tym konkretnym przypadku jest dopuszczalne (podobnie jak przekazywanie --trust-model=alwaysw ten sam sposób ).
Blacklight Shining

To jest mój klucz. Czy oznaczanie go jako zaufanego nie jest dokładnie tym, czego chcę?
jorfus

1
Jeśli to faktycznie twój klucz, to tak, oznacz go jako ostatecznie zaufany (chociaż osobiście wolę to zrobić, a --edit-keynie przez dodanie trusted-keylinii). Pytający nie powiedział, że narzekał ich własny klucz gpg.
Blacklight Shining

1

Zakładam, że podobnie jak ja, wiele osób przychodzi tutaj po część pytania „bez interakcji z klawiaturą”. W przypadku gpg2 i gpg-agent podpisywanie / szyfrowanie / odszyfrowywanie rzeczy bez interakcji z klawiaturą było dość skomplikowane. Oto, jak utworzyć podpis, gdy hasło klucza prywatnego w postaci zwykłego tekstu jest zapisywane w pliku tekstowym:

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

Zmień -b -s -a w zależności od potrzeb. Pozostałe przełączniki są obowiązkowe. Możesz także po prostu użyć --passphrase 'SECRET'. Jak już wspomniano, bądź z tym ostrożny. Oczywiście pliki tekstowe w postaci zwykłego tekstu nie są dużo lepsze.


0

Lub podpisz klucz (oczywiście po zweryfikowaniu odcisku palca):

gpg --sign-key <recipient email address>

Następnie w pełni ufasz kluczowi.

  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
Zaufanie właścicielowi nie ma nic wspólnego z tym problemem.
Ustaw

Ianes może edytować swoją odpowiedź, aby zaktualizować informacje o zaufaniu do kluczy? Obecnie może to wprowadzać w błąd… --lsign-keyMoże też lepszy pomysł, prawda? zobacz mój drugi komentarz o lsign
n611x007

0

wprowadź opis obrazu tutaj

Kiedy tworzysz certyfikat po raz pierwszy ze swoim identyfikatorem e-mail, wybierz w pełni zaufany certyfikat, a następnie za każdym razem, gdy zaszyfrujesz jakikolwiek plik, nie zadajesz pytania typu .... po więcej informacji otwórz obrazek w powyższym linku.

NIE jest pewne, że klucz należy do osoby wymienionej w identyfikatorze użytkownika. Jeśli ty naprawdę wiesz, co robisz, możesz odpowiedzieć twierdząco na następne pytanie.

Czy mimo to użyć tego klucza? (t / N)


0

Inne podejście: aby odmówić dostępu do poufnych danych (zamiast zaszyfrować je za pomocą kluczy innych firm), przesyłam TYLKO * mój ** klucz PUBLICZNY na serwer, na którym chcę chronić dane, i używam tego klucza do szyfrowania. Eliminuje to potrzebę interaktywnego monitu o podanie hasła ułatwiającego automatyzację, a co najważniejsze, klucz PRYWATNY znajduje się poza serwerem publicznym.

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

Jednak jeśli NIE szyfrujesz własnym kluczem publicznym, użycie przełącznika --trust-model alwaysjest nieco ryzykowne. Zresztą inny sposób rozwiązania problemu odmowy dostępu do danych. HTH - Terrence Houlahan

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.