Grundlegendes zu Unix "Expect"

2

Ich glaube nicht, dass ich das Dienstprogramm "expect" richtig verstehe.

Bei der Suche nach einer Möglichkeit zur Automatisierung eines Erstellungsprozesses, der das Signieren von JARs umfasst, bin ich auf das Problem gestoßen, dass ich damit JARSIGNER ein Kennwort zuweisen kann (ob ein Kennwort in einem Shell-Skript eine gute Idee ist, die ich verstehe, mit welchen Risiken es verbunden ist) ).

Erwarten Sie "Passwort für Keystore eingeben:"

Anstatt dies zu bemerken, wartete der Jarsigner an dieser Schlange.

Verstehe ich den Punkt "erwarten" völlig falsch und wenn ja, was kann ich verwenden, um diesen Effekt zu erzielen?

zchtodd
quelle

Antworten:

1

Ich denke, es würde einen größeren Kontext Ihres Codes erwarten. Aber ich würde denken, dass etwas in diese Richtung funktionieren sollte:

expect -c "spawn jarsigner <options here> ; expect \"Enter Passphrase for keystore:\" ; send $PASSWORD\n ; interact"

schäbig
quelle
Dies funktioniert, aber das Weitergeben von Kennwörtern wie diesem im Klartext ist ein Sicherheitsrisiko.
Eric Leschinski
1

Sind Sie zunächst sicher, dass der Jarsigner keine Möglichkeit hat, diese über die Befehlszeilenoption oder eine Konfigurationsdatei bereitzustellen? Wenn nicht, erwarten Sie ist ein guter letzter Ausweg. Stellen Sie sicher, dass Sie den Unterprozess (jarsigner) mit einer Pty und nicht mit einer Pipe erzeugen. Einige Apps, insbesondere solche, die nach einem Passwort fragen, verwenden das tty-Gerät im Raw-Modus und erwarten eine tty-Schnittstelle.

Dann müssen Sie, wenn Sie es erwarten, das Passwort senden.

Keith
quelle