[gelöst] Linux: Verhalten von /usr/bin/pwgen via subprocess

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
BoKn
User
Beiträge: 2
Registriert: Dienstag 7. Februar 2012, 15:44

Liebes Forum, Hallo!

Doku und Suche bringen mich (ehrlich! Edit: Die naheliegende Doku von pwgen habe ich aber nicht vollständig gelesen, deshalb bin ich ein Depp.) nicht weiter, deshalb erlaube ich mir, mein Problem zu schildern:

Ich möchte das Programm pwgen über mein Skript ansprechen, um mir Kennwörter zu generieren.
Warum? Weil die nicht völlig zufällig sind, sondern nach phonetischen Regeln generiert werden.
Die meisten, die dieses Programm ausspuckt, sind ziemlich gut zu merken.
(Ich habe keinen Nerv, die Funktionalität komplett nachzuprogrammieren.)

Jetzt das Problem: Das Programm pwgen scheint sich anders zu verhalten, wenn ich es aus dem Skript heraus anspreche.
Oder: Ich mache das mit subprocess nicht richtig, deshalb kommt Quark dabei heraus.
Ich bin auf Fedora 16 (64bit), Python 2.7.2, pwgen 2.06 (laut yum).

Test-Code:

Code: Alles auswählen

#!/usr/bin/python2.7
# -*- coding: utf-8 -*-

import subprocess
proc = subprocess.Popen(["pwgen", "-B","8"],shell=False,stdout=subprocess.PIPE)
wert,fehler = proc.communicate()
print "Ausgabe:", repr(wert)
print "Fehler:", fehler
returncode = proc.returncode
print "Returncode:", returncode
Soll:
pwgen -B 8 gibt eine Seite von 8-stelligen Kennwörtern aus. Sie enthalten Großbuchstaben, Kleinbuchstaben und Ziffern.

Ist:

Code: Alles auswählen

Ausgabe: 'aihiecha\n'
Fehler: None
Returncode: 0
Ich bekomme genau ein Kennwort. Dieses hat 8 Zeichen, allerdings besteht es immer nur aus Kleinbuchstaben.
Das mit dem einen Kennwort wäre nicht schlimm, denn ich will jeweils nur eines. Mein ursprünglicher Befehl lautete deshalb auch pwgen -B -1 8. Das gibt auch ein Kennwort, aber dort sind auch nur Kleinbuchstaben enthalten.
Und nein, es hilft nicht, das Programm mit Pfad (/usr/bin/pwgen) anzusprechen.

Mittlerweile bin ich fast soweit, pwgen in eine Datei schreiben zu lassen und diese dann wieder auszulesen...
Kann mich jemand erleuchten? Ich bin auf alles gefasst, hauptsächlich auf Schelte und virtuelle Ohrfeigen.
(Bitte jetzt aber nicht über die Qualität der Kennwörter diskutieren...)

Herzliche Grüße,
Boris
Zuletzt geändert von BoKn am Dienstag 7. Februar 2012, 16:39, insgesamt 1-mal geändert.
deets

man-page lesen hilft:

"""

The pwgen program is designed to be used both interactively, and in shell scripts. Hence, its default behavior differs depending on
whether the standard output is a tty device or a pipe to another program. Used interactively, pwgen will display a screenful of pass‐
words, allowing the user to pick a single password, and then quickly erase the screen. This prevents someone from being able to "shoulder
surf" the user's chosen password.

When standard output (stdout) is not a tty, pwgen will only generate one password, as this tends to be much more convenient for shell
scripts, and in order to be compatible with previous versions of this program.

In addition, for backwards compatibility reasons, when stdout is not a tty and secure password generation mode has not been requested,
pwgen will generate less secure passwords, as if the -0A options had been passed to it on the command line. This can be overriden using
the -nc options. In the future, the behavior when stdout is a tty may change, so shell scripts using pwgen should explicitly specify the
-nc or -0A options. The latter is not recommended for security reasons, since such passwords are far too easy to guess.

"""


Und siehe da, pwgen -B 8 -1 -nc macht das verlangte auf der Shell. Das -1 kannst du dir dann mit subprocess sparen.
BoKn
User
Beiträge: 2
Registriert: Dienstag 7. Februar 2012, 15:44

Ach du Sch...

Dann muss ich mich entschuldigen.
Ich hab alle Optionen von pwgen hoch und runter gelesen, aber...
Das tut mir leid.
Wieder mal ein Fall von RTFM.
Antworten