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)
echo -e "PASSPHRASE" "\nyes" | gpg --passphrase-fd 0 -r USER --encrypt FILENAME.TXT
?--batch
y--yes
.Respuestas:
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 always
agregar su comando gpg.Aquí está la parte relevante de la página de manual:
fuente
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
fuente
gpg2 --edit-key <key-id>
hacerlolsign
ysave
. 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.gpg
, no solo paragpg2
:)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
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.fuente
lsign
serí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
?Usa este comando, te ayudará
echo "PASSPHRASE" | gpg --passphrase-fd 0 --always-trust -r USER --encrypt FILENAME.TX
fuente
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:
obtener ID de clave larga (el resultado está en la quinta columna):
Agregue la línea de clave confiable a ~ / gnupg / gpg.conf
línea gpg en el script de respaldo:
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
fuente
trusted-key
línea agpg.conf
harágpg
que siempre confíe en esa clave tan completamente como en una de las claves del usuario , lo cual es malo . Pasar--trusted-key
como argumento , y solo en este caso específico es aceptable (al igual que pasar--trust-model=always
de la misma manera ).--edit-key
, no agregando unatrusted-key
línea). El autor de la pregunta no dijo que era su propia clave la quegpg
se quejaba.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.fuente
O firme la clave (después de verificar la huella digital, por supuesto):
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
fuente
--lsign-key
puede ser una mejor idea, ¿no? ver mi otro comentario sobre lsignCuando 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.
fuente
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 always
es un poco complicado. De todos modos, una forma diferente de solucionar el problema de denegar el acceso a los datos. HTH- Terrence Houlahanfuente