bash - encriptar - gpg para linux
archivo de encriptación gpg sin interacción del teclado (8)
Aquí está mi solución, basada en gpg2 (pero apuesto a que puedes 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 indicará a gpg2 que confíe en la clave por completo, para que pueda encriptar sin aviso
Estoy ejecutando el siguiente comando dentro de un crontab para encriptar 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)
Como David sugirió, el problema aquí es que gpg no confía en la clave pública que está usando para encriptar. Podrías firmar la llave como él explicó.
Una alternativa, especialmente si la clave puede estar cambiando ocasionalmente, sería --trust-model always
a su comando gpg.
Aquí está el bit relevante de la página man:
--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.
El enfoque de pirateo:
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 el USUARIO no está firmada. Si confías en él, puedes 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 ser bueno ir en su crontab. Todavía recomendaría usar la solución que propuse, poniendo la frase de contraseña en un archivo separado y haciéndolo solo legible por el único usuario con el que se ejecute el comando. Si haces eso, puedes matar el yes |
, y solo tiene la línea de cifrado.
Me estaba encontrando con esto también. No pude obtener la clave de firma para hacer algo 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 de confianza a ~ / gnupg / gpg.conf
trusted-key 16DIGITALPHANUMERICKEYID
Línea de gpg en script de copia de seguridad:
gpg -e -r [email protected] backup_file.tgz
Cron de depuración: también estoy capturando salida de dubugging de cron enviando stdout y stderr a un archivo de registro en la línea de comandos de cron. Es útil saber
O bien, firme la clave (después de que haya mejorado la huella digital, por supuesto):
gpg --sign-key <recipient email address>
Después de eso, confías 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
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, fue bastante complicado firmar / encriptar / descifrar cosas sin ninguna interacción con el teclado. Así es como crearía una firma cuando su contraseña de clave privada se guarde en un archivo de texto:
cat something_so_sign.xzy | gpg /
--passphrase-file "plaintext_passphrase.txt" /
--batch /
--pinentry-mode loopback /
-bsa
Cambia -b -s-según tus necesidades. Los otros interruptores son obligatorios. También puede usar --passphrase ''SECRET''
. Como ya se señaló, tenga cuidado con eso. Los archivos de texto sin formato no son mucho mejores, por supuesto.
Usa este comando, te ayudará
echo "PASSPHRASE" | gpg --passphrase-fd 0 --always-trust -r USER --encrypt FILENAME.TX
Cuando crea un certificado por primera vez con su id. De correo electrónico, seleccione un certificado completamente confiable, entonces cada vez que encripte un 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 la ID de usuario. Si realmente sabe lo que está haciendo, puede responder la siguiente pregunta con un sí.
Use esta tecla de todos modos? (s / N)