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?

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"


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.