Subprocess und GPG

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JohnDoe

Hi, weiß jemand wie ich bei Subprocess ein Passwort an das Programm gpg übergeben kann?

Code ist folgender:

Code: Alles auswählen

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import subprocess

def main():
    fin = 'test.txt'
    fout = 'test.enc'
    pw = 'test'
    args = ['gpg', '--symmetric', '--cipher-algo', cipher_algo, '--output', fout, fin])
    p = subprocess.Popen(args)

if __name__ == '__main__':
    main()
Führe ich das Skript so wie es dasteht aus, so fragt mich der gpg-agent nach dem Passwort zum Verschlüsseln. Dieses will ich allerdings als Parameter übergeben.

Mein erster Gedanke war innerhalb von Popen() die Variable shell auf True zu setzen, dann funktioniert aber nichts mehr so, wie ich es erwarte:

Code: Alles auswählen

$ gpg: Auf geht's - Botschaft eintippen ...
gpg: [stdin]: read error: Eingabe-/Ausgabefehler
gpg: processing message failed: Unbekannter Systemfehler
^C
$
Ich blick da im Moment überhaupt nicht durch, vielleicht kann mir jemand auf die Sprünge helfen. Oder mir einen Weg mittels gpgme oder python-gnupg zeigen (Wobei python-gnupg nicht so einfach funktionieren wird, hab das in einem anderen Thread angesprochen, leider funktioniert der darin von mir verlinkte Patch nicht [man sollte solche Patches immer erst testen bevor man freudig in die Luft springt])

mfg

EDIT: Betriebssystem ist ein up-to-date Archlinux. Sollte aber generell mit jeder Linux-Distribution gehen.
lunar

@JohnDoe Mit "subprocess" geht das wahrscheinlich gar nicht, da "gpg" das Passwort unter Umgehung der Standardeingabe einfach direkt vom Terminal liest (u.a. um die Zeichen dabei auszublenden). Du wirst "pexpect" nutzen müssen.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Naja, es geht wohl schon, wenn man sich mal die Ausgabe von ``man gpg`` anschaut. Dort gibt es zumindest eine passphrase-Option im Abschnitt "Doing things one usually doesn't want to do."
Das Leben ist wie ein Tennisball.
JohnDoe

lunar hat geschrieben:@JohnDoe Mit "subprocess" geht das wahrscheinlich gar nicht, da "gpg" das Passwort unter Umgehung der Standardeingabe einfach direkt vom Terminal liest (u.a. um die Zeichen dabei auszublenden). Du wirst "pexpect" nutzen müssen.
Nicht direkt, python-gnupg macht das auch über subprocess. Aber frag mich nicht wie. Hätte ich den Code verstanden würde ich hier ja nicht um Hilfe bitten :)
EyDu hat geschrieben:Naja, es geht wohl schon, wenn man sich mal die Ausgabe von ``man gpg`` anschaut. Dort gibt es zumindest eine passphrase-Option im Abschnitt "Doing things one usually doesn't want to do."
Mist, ich hätte doch ganz bis nach unten scrollen sollen. Danke.

Mal sehen obs klappt.

mfg
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Nun, wenn es dich nicht stoert, dass dann jeder der zb `ps aux` aufruft, das Passwort ablesen kann - das ist auch der Grund (oder mit ein Grund) warum das in dem Abschnitt steht. Haetten man pages <blink> Tags: Das wuerde blinken.
lunar

EyDu hat geschrieben:Naja, es geht wohl schon, wenn man sich mal die Ausgabe von ``man gpg`` anschaut. Dort gibt es zumindest eine passphrase-Option im Abschnitt "Doing things one usually doesn't want to do."
Nun, es gibt einen Grund, warum ich diese Möglichkeit nicht erwähnt habe…
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

lunar hat geschrieben:Nun, es gibt einen Grund, warum ich diese Möglichkeit nicht erwähnt habe…
Davon bin ich ausgegangen, deshalb habe ich den Namen des Abschnitts dazu genannt und nicht einfach die Option in den Raum geworfen. Immerhin darf jeder selbst entscheiden, ob er sich in den Fuß schießen will oder nicht.
Das Leben ist wie ein Tennisball.
JohnDoe

cofi hat geschrieben:Nun, wenn es dich nicht stoert, dass dann jeder der zb `ps aux` aufruft, das Passwort ablesen kann - das ist auch der Grund (oder mit ein Grund) warum das in dem Abschnitt steht. Haetten man pages <blink> Tags: Das wuerde blinken.
Haha, das ist gut. Blink-Tags wären vielleicht wirklich oftmals sinnvoll.

Zur allgemeinen Belustigung: Natürlich stört es mich, wenn man das Passwort über ps oder top oder sonstwas anzeigen kann - ich persönlich würde ja python-gnupg verwenden, wenn es denn so funktionieren würde wie ich es gerne hätte. Noch besser wäre natürlich pygpgme, das ist soweit ich weiß die offiziell vorgeschlagene Methode wenn man GPG von Python aus verwenden will - leider gibts dazu nicht wirklich eine Doku. Falls doch: Her damit!

Ich hab auch versucht python-gnupg so zu erweitern, dass man damit direkt Dateien symmetrisch ver- und entschlüsseln kann - hat nur leider nicht funktioniert.

Letztlich bin ich für jeden Hinweis dankbar, wie ich Dateien ganz einfach symmetrisch ver- und entschlüsseln kann mittels GPG.

mfg
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Zu python-gnupg gibt es hier ein wenig Dokumentation. Auf den ersten Blick sind dort auch Ver- und Entschlüsselung mittels Passphrase beschrieben.
Das Leben ist wie ein Tennisball.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

EyDu hat geschrieben:Zu python-gnupg gibt es hier ein wenig Dokumentation.
Sowie einen verbesserten Fork, von jemandem der sich mehr um Sicherheit kümmert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
JohnDoe

EyDu hat geschrieben:Zu python-gnupg gibt es hier ein wenig Dokumentation. Auf den ersten Blick sind dort auch Ver- und Entschlüsselung mittels Passphrase beschrieben.
Die Doku habe ich gefunden, leider bietet python-gnupg keine Möglichkeit für symmetrische Verschlüsselung an.
Leonidas hat geschrieben:
EyDu hat geschrieben:Zu python-gnupg gibt es hier ein wenig Dokumentation.
Sowie einen verbesserten Fork, von jemandem der sich mehr um Sicherheit kümmert.
Yeah, das sieht verdammt gut aus, Danke.

mfg
Antworten