2010-03-27 10 views
6

Das folgende Skript funktioniert unter Mac OS X, aber seit es auf Ubuntu verschoben wurde, scheint es nicht aus der Passwortdatei zu lesen. Selbst wenn ich es von der Kommandozeile aus starte, bekomme ich eine Popup-Eingabeaufforderung, in der ich nach dem Passwort gefragt werde. Da dies über cron laufen wird, möchte ich nicht, dass dies passiert ... Ich möchte, dass es das Passwort aus der Datei ohne Aufforderung liest. Zu beachten, ich habe versucht mit Passwort-fd und Passwort-Datei, von denen keines gearbeitet ...GnuPG Shell Script - Weist das Passwort nicht an

#!/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 

Antwort

0

Ihr Problem ist wahrscheinlich, dass $passphrase null ist. Auf Ubuntu sh ist symlinked zu dash, die $(<file_name) auf die gleiche Weise wie Bash nicht versteht (aber auch keinen Fehler).

Sie können Ihre shebang ändern:

#!/bin/bash 

oder verwenden $(cat pass.txt)

Auch, warum nicht die zweite, dritte und vierte Zeile kombinieren ?: pass_phrase=$(<pass.txt) (oder pass_phrase=($(<pass.txt)), wenn Sie versuchen zu strippen außer dem ersten Wort in der Datei.

Your previous question

0

Verwendung

#!/bin/bash 

oder

#!/usr/bin/env bash 

als erste Zeile statt #!/bin/sh

Wie für Ihre Passphrase Problem, sollten Sie wahrscheinlich t ry, einen automatischen Mechanismus zu benutzen. Weitere Informationen finden Sie in der gpg-Dokumentation. Ich verwende kein gpg, aber Sie können gpg-agent auschecken.

0

Sie bekommen Kennwort-Eingabeaufforderung, weil SiehabenVariablensatz (Wenn Sie auf Abbrechen klicken, wird das Entschlüsseln von Dateien fortgesetzt). DISPLAY sollte nicht in der cron-Umgebung gesetzt werden, so können Sie es wahrscheinlich ignorieren, aber sicher, oder in der Lage sein, das Skript von Eingabeaufforderung zu testen hinzufügen

unset DISPLAY 

zu Beginn des Skripts oder führen Sie es vor Ausführen.

auch in der Lage sein $(<file) Syntax verwenden Sie

#!/bin/sh 

zu

#!/bin/bash 

Sie sollten es vermeiden, mit --passphrase Option ändern müssen, die zu enthüllen Ihr Kennwort auf Multi-User-System führen könnte. Sie können stattdessen --passphrase-file verwenden. Hier ist, wie ich das Skript ändern würde:

#!/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 

Zur Lage der Kennwortdatei zu speichern, bevor aktuelles Verzeichnis zu ändern, ich speicherte es in PASSFILE variabel.

3

Die --passphrase-file Option scheint gebrochen/nicht geehrt zu werden. Ich hatte --passphrase-fd 0 stattdessen zu verwenden, etwa so:

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

Ja, ich konnte nicht --passphrase-Datei entweder zu arbeiten, während -passphrase-fd gearbeitet. – Zitrax

+0

Es funktioniert in Kombination mit --no-use-agent --batch'. Interessanterweise funktioniert '--passphrase' ohne diese zwei Optionen. –

0

--archive hinzufügen Passwort lesen von --passphrase-file

0

Sie müssen zu verwenden:

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

Verwenden Option --no-use-agent. Sie werden nicht aufgefordert, die Option --passphrase zu verwenden.

2

Wenn Sie die Datei nicht über die Standardeingabe bereitstellen möchten (z. B. weil Sie diese in einen anderen Befehl wie git einstecken, der den Inhalt über die Standardeingabe signieren soll), können Sie einen anderen verwenden Dateideskriptor:

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

Dies funktioniert:

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