gpg cifrar archivo sin interacción de teclado [cerrado]

84

Estoy ejecutando el siguiente comando dentro de un crontab para cifrar un archivo y no quiero una interacción de teclado

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

pero tengo esta respuesta:

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
fuente
Dado que --passphrase-fd lee solo la primera línea ... ¿qué sucede si ejecuta echo -e "PASSPHRASE" "\nyes" | gpg --passphrase-fd 0 -r USER --encrypt FILENAME.TXT?
David Costa
man page alguien? --batchy --yes.
u0b34a0f6ae

Respuestas:

76

Como insinuó David, el problema aquí es que gpg no confía en la clave pública que está utilizando para cifrar. Podrías firmar la llave como él explicó.

Una alternativa, especialmente si la clave puede estar cambiando ocasionalmente, sería --trust-model alwaysagregar su comando gpg.

Aquí está la parte relevante de la página de manual:

--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
fuente
No entiendo por qué el sistema piensa que eso es código. Hice clic en cotizar; no código. Cuando se edita, aparece solo como citado (sin color). Extraño.
rsaw
4
es porque el texto usa espacios para alinearse.
Tomáš Fejfar
esta es la respuesta correcta para mi! gracias
eigenfield
46

Aquí está mi solución, basada en gpg2 (pero apuesto a que puede aplicar una técnica similar a gpg)

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

Esto le dirá a gpg2 que confíe completamente en la clave, para que pueda cifrar sin preguntar

Antonio
fuente
1
Esto actualiza el trust-db inmediatamente y no es necesario guardarlo.
carriles
12
Esto establece la confianza del propietario, no la validez de la clave. Ultimate Trust es solo para sus propias llaves. es decir, todo lo firmado por una identidad de confianza final se maneja como si lo hubiera firmado usted mismo. Por lo tanto, NO CONFIGURE LA CONFIANZA PARA LO ÚLTIMO si no es su clave. El problema es la validez de la clave. Para solucionar este problema, debe firmar la clave. (considere una firma local y verificación de huellas digitales)
x539
3
x539 es correcto. después de gpg2 --edit-key <key-id>hacerlo lsigny save. Creo que la confianza 5 es un uso incorrecto para esto (mal entendido), y (para mí) incluso fue ineficaz (inútil), por lo que dijo x539.
n611x007
Tenga en cuenta que esto también funciona para lo normal gpg, no solo para gpg2:)
Markus
10

El enfoque del truco:

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

El problema subyacente es que la clave que tiene para USUARIO no está firmada. Si confía en él, puede firmarlo con

gpg --edit-key USER sign

Probablemente le haga un par de preguntas, dependiendo de su configuración. Haga esto una vez, entonces debería estar listo para ingresar a su crontab. Aún así, recomendaría usar la solución que propuse, poner la frase de contraseña en un archivo separado y hacerla solo legible por el usuario con el que se ejecuta el comando. Si hace eso, puede eliminar el yes |, y solo tener la línea de cifrado.

David Souther
fuente
1
Probé el método de la clave de signo, ambos gpg2 --edit-key USER sign, ahora muestra que está firmado, pero aún confía en: desconocido. Y el lote aún no se ejecutará sin indicaciones
nycynik
2
Creo que lsignsería una mejor idea. ¿No es que si firmas ie. firmar localmente una clave, ese signo permanece en su computadora. Pero si simplemente firma, eso se considera público y, por lo tanto, se enviará a los servidores de claves cuando haga un --send-keys?
n611x007
2

Usa este comando, te ayudará

echo "PASSPHRASE" | gpg --passphrase-fd 0 --always-trust -r USER --encrypt FILENAME.TX
Añil
fuente
1

Yo también me estaba encontrando con esto. No pude conseguir la clave de señal para hacer nada interesante. Esto es lo que hice:

crea una clave gpg:

gpg --gen-key

obtener ID de clave larga (el resultado está en la quinta columna):

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

Agregue la línea de clave confiable a ~ / gnupg / gpg.conf

trusted-key 16DIGITALPHANUMERICKEYID

línea gpg en el script de respaldo:

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

Depurando cron: también estoy capturando la salida de dubugging de cron enviando stdout y stderr a un archivo de registro en la línea de comando cron. Es útil saber

jorfus
fuente
1
No, no hagas eso. Agregar una trusted-keylínea a gpg.confhará gpgque siempre confíe en esa clave tan completamente como en una de las claves del usuario , lo cual es malo . Pasar --trusted-keycomo argumento , y solo en este caso específico es aceptable (al igual que pasar --trust-model=alwaysde la misma manera ).
Blacklight Shining
Es mi llave. ¿No es exactamente lo que quiero marcar como de confianza?
jorfus
1
Si en realidad es su clave, entonces sí, márquela como de confianza final (aunque personalmente prefiero hacer eso con --edit-key, no agregando una trusted-keylínea). El autor de la pregunta no dijo que era su propia clave la que gpgse quejaba.
Blacklight Shining
1

Supongo que, como yo, mucha gente viene aquí para la parte de la pregunta "sin interacción con el teclado". Con gpg2 y gpg-agent se volvió bastante complicado firmar / cifrar / descifrar cosas sin ninguna interacción del teclado. Así es como crearía una firma cuando su frase de contraseña de clave privada de texto sin formato se guarde en un archivo de texto:

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

Cambie -b -s -a según sus necesidades. Los otros interruptores son obligatorios. También puede usar --passphrase 'SECRET'. Como ya se señaló, tenga cuidado con eso. Por supuesto, los archivos de texto sin formato no son mucho mejores.

Rojo lima
fuente
0

O firme la clave (después de verificar la huella digital, por supuesto):

gpg --sign-key <recipient email address>

Después de eso, confía plenamente en la clave.

  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
carriles
fuente
5
Confiar en el propietario no tiene nada que ver con este problema. Establezca la confianza del propietario solo si confía en él con respecto a la firma / verificación de otras claves y sus propietarios
x539
Ianes, ¿por qué no editar su respuesta para actualizar sobre la confianza de claves? Actualmente puede ser engañoso ... También --lsign-keypuede ser una mejor idea, ¿no? ver mi otro comentario sobre lsign
n611x007
0

ingrese la descripción de la imagen aquí

Cuando cree un certificado por primera vez con su ID de correo electrónico, seleccione el certificado de plena confianza y, a continuación, cada vez que cifre cualquier archivo, no hará preguntas como ... para obtener más información, abra la imagen en el enlace de arriba.

NO es seguro que la clave pertenezca a la persona nombrada en el ID de usuario. Si realmente sabe lo que está haciendo, puede responder la siguiente pregunta con un sí.

¿Usar esta clave de todos modos? (s / N)

sumer raj
fuente
0

Un enfoque diferente: para denegar el acceso a datos confidenciales (en lugar de cifrarlos con claves de terceros), subo SOLAMENTE * mi ** clave PÚBLICA al servidor en el que quiero proteger los datos y uso esa clave para cifrar. Esto niega la necesidad de un aviso interactivo para proporcionar una contraseña que facilite la automatización y, lo mejor de todo, la clave PRIVADA está separada del servidor público.

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

Sin embargo, si NO está encriptando con su propia clave pública, el uso del interruptor --trust-model alwayses un poco complicado. De todos modos, una forma diferente de solucionar el problema de denegar el acceso a los datos. HTH- Terrence Houlahan

F1Linux
fuente