GPG-Verschlüsselungsdatei ohne Tastaturinteraktion [geschlossen]

84

Ich führe den nächsten Befehl in einer Crontab aus, um eine Datei zu verschlüsseln, und ich möchte keine Tastaturinteraktion

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

aber ich habe diese Antwort:

gpg: C042XXXX: There is no assurance this key belongs to the named user

pub  40XXX/C042XXXX 2012-01-11 Name LastName. (comment) <[email protected]>
 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) 
coto
quelle
Da --passphrase-fd nur die erste Zeile liest ... was passiert, wenn Sie ausführen echo -e "PASSPHRASE" "\nyes" | gpg --passphrase-fd 0 -r USER --encrypt FILENAME.TXT?
David Costa
Manpage jemand? --batchund --yes.
u0b34a0f6ae

Antworten:

76

Wie David angedeutet hat, besteht das Problem hier darin, dass gpg dem öffentlichen Schlüssel, den Sie zum Verschlüsseln verwenden, nicht vertraut. Sie könnten den Schlüssel unterschreiben, wie er erklärte.

Eine Alternative - insbesondere wenn sich der Schlüssel gelegentlich ändert - besteht darin --trust-model always, Ihren gpg-Befehl zu verwenden.

Hier ist das relevante Bit aus der Manpage:

--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
quelle
Verstehe nicht, warum das System das für Code hält. Ich klickte auf Zitat; kein Code. Beim Bearbeiten wird es nur wie angegeben angezeigt (ohne Farbe). Seltsam.
rsaw
4
Dies liegt daran, dass der Text Leerzeichen zum Ausrichten verwendet.
Tomáš Fejfar
Das ist die richtige Antwort für mich! danke
Eigenfeld
46

Hier ist meine Lösung, basierend auf gpg2 (aber ich wette, Sie können eine ähnliche Technik auf gpg anwenden)

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

Dadurch wird gpg2 angewiesen, dem Schlüssel vollständig zu vertrauen, damit Sie ohne Aufforderung verschlüsseln können

Antonius
quelle
1
Dadurch wird die Trust-Datenbank sofort aktualisiert und es ist kein Speichern erforderlich.
Fahrspuren
12
Dies setzt die Eigentümervertrauensstellung und nicht die Schlüsselgültigkeit. Ultimate Trust gilt nur für Ihre eigenen Schlüssel. dh Alles, was von einer letztendlich vertrauenswürdigen Identität signiert wird, wird als von Ihnen selbst signiert behandelt. Setzen Sie das Vertrauen also nicht auf ULTIMIEREN, wenn es nicht Ihr Schlüssel ist. Das Problem ist die Schlüsselgültigkeit. Um dies zu lösen / zu umgehen, sollten Sie den Schlüssel unterschreiben. (Betrachten Sie eine lokale Signatur und eine Überprüfung des Fingerabdrucks)
x539
3
x539 ist richtig. nachdem gpg2 --edit-key <key-id>du es getan hast lsignund save. Ich denke, das Vertrauen 5 ist eine falsche Verwendung dafür (missverstanden), und (für mich) es war sogar unwirksam (nutzlos), weil x539 es erzählt hat.
n611x007
Beachten Sie, dass dies auch für normal funktioniert gpg, nicht nur für gpg2:)
Markus
10

Der Hack-Ansatz:

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

Das zugrunde liegende Problem ist, dass der Schlüssel, den Sie für USER haben, nicht signiert ist. Wenn Sie ihm vertrauen, können Sie ihn unterschreiben

gpg --edit-key USER sign

Abhängig von Ihrer Konfiguration werden wahrscheinlich einige Fragen gestellt. Tun Sie dies einmal, dann sollten Sie gut darin sein, in Ihre Crontab zu gehen. Ich würde weiterhin empfehlen, die von mir vorgeschlagene Lösung zu verwenden, die Passphrase in einer separaten Datei abzulegen und sie nur für den einen Benutzer lesbar zu machen, unter dem der Befehl ausgeführt wird. Wenn Sie das tun, können Sie die töten yes |und haben nur die Verschlüsselungsleitung.

David Souther
quelle
1
Ich habe die Sign-Key-Methode ausprobiert, beide gpg2 --edit-key USER-Zeichen. Jetzt zeigt sie, dass sie signiert ist, aber immer noch vertrauenswürdig: unbekannt. Und der Stapel wird immer noch nicht ohne Aufforderung ausgeführt
Nycynik
2
Ich denke, lsignwäre eine bessere Idee. Ist es nicht so, wenn Sie z. Signieren Sie lokal einen Schlüssel, dieser bleibt auf Ihrem Computer. Aber wenn Sie einfach unterschreiben, gilt dies als öffentlich und wird daher an Keyserver gesendet, wenn Sie eine --send-keys?
n611x007
2

Verwenden Sie diesen Befehl, er wird Ihnen helfen

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

Ich bin auch darauf gestoßen. Ich konnte keinen Zeichenschlüssel bekommen, um etwas Interessantes zu tun. Folgendes habe ich getan:

Erstellen Sie einen GPG-Schlüssel:

gpg --gen-key

lange Schlüssel-ID abrufen (Ergebnis in der 5. Spalte):

gpg --list-keys --with-colon [email protected]

Fügen Sie ~ / gnupg / gpg.conf eine vertrauenswürdige Schlüsselzeile hinzu

trusted-key 16DIGITALPHANUMERICKEYID

GPG-Zeile im Sicherungsskript:

gpg -e -r [email protected] backup_file.tgz

Debuggen von Cron: Ich erfasse auch die Cron-Dubugging-Ausgabe, indem ich stdout und stderr an eine Protokolldatei in der Cron-Befehlszeile sende. Es ist hilfreich zu wissen

Jorfus
quelle
1
Nein, tu das nicht. Hinzufügen einer trusted-keyZeile gpg.confverursachen , gpgum immer den Schlüssel vertrauen so vollständig wie einer der eigenen Schlüssel des Benutzers , die eine schlechte Sache ist . Die Übergabe --trusted-keyals Argument und nur in diesem speziellen Fall ist akzeptabel (ebenso wie die Übergabe --trust-model=alwaysauf die gleiche Weise ).
Blacklight Shining
Es ist mein Schlüssel. Ist es nicht genau das, was ich will, als vertrauenswürdig zu markieren?
Jorfus
1
Wenn es tatsächlich Ihr Schlüssel ist, dann markieren Sie ihn als letztendlich vertrauenswürdig (obwohl ich es persönlich lieber mache --edit-key, nicht durch Hinzufügen einer trusted-keyZeile). Der Fragesteller sagte nicht, dass es ihr eigener Schlüssel gpgwar, über den er sich beschwerte.
Blacklight Shining
1

Ich gehe davon aus, dass wie ich viele Leute hierher kommen, um den Teil der Frage „ohne Tastaturinteraktion“ zu behandeln. Mit gpg2 und gpg-agent wurde es ziemlich kompliziert, Dinge ohne Tastaturinteraktion zu signieren / verschlüsseln / entschlüsseln. So würden Sie eine Signatur erstellen, wenn Ihre Passphrase für den privaten Klartextschlüssel in einer Textdatei gespeichert wird:

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

Ändern Sie -b -s -a je nach Ihren Anforderungen. Die anderen Schalter sind obligatorisch. Sie können auch nur verwenden --passphrase 'SECRET'. Seien Sie, wie bereits erwähnt, vorsichtig damit. Klartext-Textdateien sind natürlich nicht viel besser.

LimeRed
quelle
0

Oder unterschreiben Sie den Schlüssel (natürlich nachdem Sie den Fingerabdruck sehr genau eingegeben haben):

gpg --sign-key <recipient email address>

Danach vertrauen Sie dem Schlüssel voll und ganz.

  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
Fahrspuren
quelle
5
Das Vertrauen in den Eigentümer hat mit diesem Problem nichts zu tun. Setzen Sie das Vertrauen des Besitzers nur, wenn Sie ihm beim Signieren / Überprüfen anderer Schlüssel und ihrer Besitzer
vertrauen
Warum bearbeiten Sie nicht Ihre Antwort, um Informationen zum Schlüsselvertrauen zu erhalten? Derzeit kann irreführend sein ... --lsign-keyKann auch eine bessere Idee sein, nein? siehe meinen anderen Kommentar über lsign
n611x007
0

Geben Sie hier die Bildbeschreibung ein

Wenn Sie zum ersten Mal ein Zertifikat mit Ihrer E-Mail-ID erstellen, wählen Sie ein vollständig vertrauenswürdiges Zertifikat aus. Wenn Sie eine Datei verschlüsseln, werden keine Fragen wie ... gestellt. Weitere Informationen finden Sie im obigen Link.

Es ist NICHT sicher, ob der Schlüssel der in der Benutzer-ID genannten Person gehört. Wenn Sie wirklich wissen, was Sie tun, können Sie die nächste Frage mit Ja beantworten.

Verwenden Sie diesen Schlüssel trotzdem? (J / N)

sumer raj
quelle
0

Ein anderer Ansatz: Um den Zugriff auf vertrauliche Daten zu verweigern (anstatt sie mit den Schlüsseln von Drittanbietern zu verschlüsseln), lade ich NUR * meinen ** PUBLIC- Schlüssel auf den Server hoch, auf dem ich Daten schützen möchte, und verwende diesen Schlüssel zum Verschlüsseln. Dadurch entfällt die Notwendigkeit einer interaktiven Eingabeaufforderung zur Eingabe eines Kennworts, das die Automatisierung erleichtert, und das Beste ist, dass der PRIVATE- Schlüssel vom öffentlichen Server getrennt ist.

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

Wenn Sie jedoch NICHT mit Ihrem eigenen öffentlichen Schlüssel verschlüsseln, ist die Verwendung des Schalters --trust-model alwaysetwas schwierig. Auf jeden Fall eine andere Art, das Problem der Verweigerung des Zugriffs auf Daten zu lösen. HTH-Terrence Houlahan

F1Linux
quelle