2010-03-27 19 views
6

La siguiente secuencia de comandos solía funcionar en Mac OS X, pero, desde que se movió a Ubuntu, no parece leer el archivo de contraseña en absoluto. Incluso cuando lo ejecuto desde la línea de comandos, haga lo que haga, recibo un mensaje emergente que me pide la contraseña. Como esto se ejecutará a través de cron, no quiero que esto suceda ... Quiero que lea la contraseña del archivo sin aviso. Tomar nota, Yo probé usando la frase de contraseña-fd y contraseña-archivo, ninguno de los cuales trabajó ...GnuPG Shell Script - Se niega a leer la contraseña

#!/bin/sh 
p=$(<pass.txt) 
set -- $p 
pass_phrase=$1 
destination="/var/www/decrypted" 
cd /var/sl_bin/ 
for FILE in *.pgp; 
do 
    FILENAME=${FILE%.pgp} 
    gpg --passphrase "$pass_phrase" --output "$destination/$FILENAME" --decrypt "$FILE" 
    rm -f $FILE 
done 

Respuesta

0

Su problema es probablemente que $passphrase es nulo. En Ubuntu sh está enlazado a dash que no comprende $(<file_name) de la misma manera que Bash (pero tampoco emite un error).

Puede cambiar su tinglado a:

#!/bin/bash 

o uso $(cat pass.txt)

también, por qué no combinar la segunda, tercera y cuarta líneas ?: pass_phrase=$(<pass.txt) (o pass_phrase=($(<pass.txt)) si usted está tratando de despojar todas menos la primera "palabra" en el archivo).

Your previous question

0

uso

#!/bin/bash 

o

#!/usr/bin/env bash 

como su primera línea en lugar de #!/bin/sh

cuanto a su problema frase de paso, probablemente debería t usar un mecanismo automático revisa la documentación de gpg para más información. No uso gpg, pero puedes consultar gpg-agent.

0

usted está recibiendo solicitud de contraseña porque tieneConjunto de variables(si hace clic en cancelar, el script continuará descifrando archivos). DISPLAY no debe fijarse en el entorno de cron, por lo que probablemente puede pasar por alto, pero para estar seguro o serán capaces de probar el script de línea de comandos añadir

unset DISPLAY 

al principio de la secuencia de comandos o bien puede hacerlo antes ejecutando

también para poder utilizar $(<file) sintaxis necesita cambiar

#!/bin/sh 

a

#!/bin/bash 

Debe evitar el uso --passphrase opción que podría conducir a revelar su contraseña en el sistema multi-usuario. Puede usar --passphrase-file en su lugar. Así es como me gustaría cambiar la secuencia de comandos:

#!/bin/sh 
PASSFILE=$(pwd)/pass.txt 
destination="/var/www/decrypted" 
cd /var/sl_bin/ 
for FILE in *.pgp; 
do 
    FILENAME=${FILE%.pgp} 
    gpg --passphrase-file $PASSFILE --output "$destination/$FILENAME" --decrypt "$FILE" 
    rm -f $FILE 
done 

al guardar la ubicación del archivo de contraseñas antes de cambiar el directorio actual, lo guardé en PASSFILE variable.

3

La opción --passphrase-file parece estar rota/no respetada. Tuve que usar --passphrase-fd 0 lugar, así:

cat .password | gpg --passphrase-fd 0 --output foo --decrypt foo.gpg 
+0

Sí, no pude conseguir --passphrase-archivo para trabajar ya sea mientras -passphrase-fd trabajó. – Zitrax

+0

Funciona combinado con '--no-use-agent --batch'. Curiosamente, '--passphrase' funciona sin esas dos opciones. –

0

añadir --archive a leer la contraseña de --passphrase-file

0

Debe utilizar:

gpg --batch --passphrase-fd 1 --passphrase-file your_password_file -c your_file_to_encript.txt 
2

opción Usar --no-use-agent. No le indicará que use la opción - frase de contraseña.

2

Si no desea suministrar el archivo a través de la entrada estándar (por ejemplo, porque está conectando esto en otro comando como git, que quiere suministrar el contenido para firmar a través de la entrada estándar), puede usar otro descriptor de archivo:

gpg --passphrase-fd 3 <your command here> 3< pass.txt 
5

Esto funciona:

gpg --no-use-agent --batch --passphrase-file pass.txt --output kkkk.tar.bz2 --decrypt kkk-data.tar.bz2.gpg 
Cuestiones relacionadas