GnuPG: Symmetrische Verschlüsselung, Passphrase als Parameter

Hallo Zusammen!

Ich bastel grad an nem Bash-Skript, das ein Archiv mit GnuPG symmetrisch verschlüsseln soll, also mit der Verwendung eines Passphrases als Schlüssel.

Dies erfolgt so:

Code:
$ gpg --symmetric abc.zip 
$ Passphrase: xxx
$ Repeat Passphrase: xxx

Weil ich ein im Skript vordefiniertes Passwort verwenden will, soll dies automatisch eingegeben werden. Mir scheint es nicht möglich, das Passwort als Parameter zu übergeben:

Code:
$ gpg --passphrase xxx --symmetric abc.zip

Wie sende ich das Passwort an den Eingabeprompt von gpg ? Oder kennt jemand eine Möglichkeit, das Passwort als Parameter zu übergeben?

Auf das Verwenden von gewöhnlichen Schlüsseln (für was das Ganze ja gedacht ist) will ich verzichten.

Danke !

[edit]

Hab weitere Erkenntnisse dazugewonnen:
Code:
echo xxx | gpg --passphrase-fd 0 -c < abc.zip > abc.zip.gpg

Leider lässt sich abc.zip.gpg mit dem Passwort "xxx" nicht mehr entschlüsseln. Auch die Ausgabe des Passwotes mittels `cat` lässt sich nachher nicht mehr entschlüsseln.
Kommen da echt irgendwelche Steuerzeichen dazwischen?
 
Ja, da kommen Steuerzeichen dazwischen. Ich würde die Passwort-Eingabe einfach mittels expect realisieren.
 
Danke, euch beiden, für die Antworten.

echo -n (Ausgabe ohne abschliessendes \n ) hat nicht funktioniert.

Ich habs also mit dem Programm expect lösen können:
Code:
VAR=$(expect -c "

spawn gpg --symmetric abc.zip
expect {

Passphrase { send \"xxx\r\"; exp_continue }
nochmal { send \"xxx\r\"; exp_continue }
}
exit
")

echo "==============="
echo "$VAR"

Zwei Fragen hab ich noch, wär super wenn die mir jemand noch erklären könnte:

Momentan prüfe ich auf "Passphrase" und "nochmal". Was, wenn gpg nicht in Deutsch, sondern in Englisch vorliegt? Dann versagt mein Programm. Gibt es eine Möglichkeit, die Eingabeaufforderungen numerisch anzusprechen? Also anstatt "Passphrase" mit 0 und statt "nochmal" 1? Und weitere Aufforderungen mit 2, 3, 4 usw.?
Das wäre dann schöner als direkt den Text ("Passphrase", "nochmal") zu lesen.

Wie kann ich auf mehrere Wörter prüfen?

So gehts nicht:
VAR=$(expect -c " spawn gpg --symmetric ../ifp10.deb
expect {

Geben Sie die Passphrase ein: { send \"abcde\r\"; exp_continue }
Geben Sie die Passphrase nochmal ein: { send \"abcde\r\"; exp_continue }

# bzw.
# 'Geben Sie die Passphrase ein': { send \"abcde\r\"; exp_continue }
# 'Geben Sie die Passphrase nochmal ein': { send \"abcde\r\"; exp_continue }
}
exit
")
echo "==============="
echo "$VAR"

Danke und einen schönen Abend!
 
Du könntest einfach vorher explizit die Sprache mittels export der LC_*-Umgebungsvariablen festlegen und damit z.B. immer englisch erzwingen.

Einfach an den Anfang des Skripts ein

Code:
export LC_ALL=C
 
Gut, danke. Eine Möglichkeit, die Aufforderungen numerisch anzusprechen kennst du nicht?

Danke für die schnellen und tollen Antworten!
 
Ich habe noch mal ein bisschen rumprobiert. Ohne expect funktioniert es so:
Code:
echo 'passphrase' | gpg --passphrase-fd 0 -c abc.zip -o abc.zip.gpg
Mit expect habe ich allerdings keine Erfahrungen, deshalb kann ich dir da nicht weiterhelfen.
 
Zurück
Oben