2010-04-16 1 views
39

Ich möchte die Ausführung eines Programms mit einem Passwort sichern.Wie mache ich ein Bash-Skript, um nach einem Passwort zu fragen?

Wie mache ich das in bash?

+1

Voting zum Schließen als unklar, bitte geben Sie an, wie die Passworteingabe anders sein soll als andere Eingaben. Kein Echo gefragt bei: http://stackoverflow.com/questions/3980668/how-to-get-a-password-from-a-shell-script-without-echoing –

Antwort

48
stty_orig=`stty -g` # save original terminal setting. 
stty -echo   # turn-off echoing. 
read passwd   # read the password 
stty $stty_orig  # restore terminal setting. 
73

Dieser Befehl wird in var PWD von stdin (mit Echo deaktiviert) lesen:

IFS= read -s -p Password: pwd 

Entschärfen IFS für führende und nachfolgende Leerzeichen in Kennwörtern ermöglichen (die in einigen Umgebungen unterstützt werden können , so dass es am besten unterstützt wird, wenn Sie die Anmeldeinformationen des Benutzers eingeben.

Um zu überprüfen, ob vorangestellte/nachfolgende Leerzeichen korrekt verarbeitet werden, können Sie Folgendes verwenden:

echo -n "$pwd" | hexdump -C 

Hinweis: Verwenden Sie nicht mit echten Passwörtern, da es auf die Konsole ablegt!

HT: Ron DuPlain für diese zusätzliche Information zu IFS-Unscharfschaltung.

+3

Gibt es irgendwelche Nachteile, wenn ich diese anstelle der verwendet akzeptierte Antwort? – Triztian

+7

@Triztian ja, das obige wird wahrscheinlich nur in Bash funktionieren. Die angenommene Antwort sollte bei den meisten (allen?) Shells funktionieren. – jberryman

4

Wenn Sie ein passwd als Parameter für ein Programm verwenden möchten, dann ist Einhörnerratschlag, um das Echo einfach auszuschalten, gut.
Mit einem Passwd Check-in das Skript funktioniert nicht - wenn der Benutzer das Bash-Skript ausführen können, haben sie auch die Erlaubnis, es zu lesen und sehen Sie die passwd.

Wenn Sie nur Benutzern mit einem Kennwort erlauben möchten, ein Programm auszuführen, besteht die sichere Methode darin, ein neues Benutzerkonto zu erstellen, das das Programm besitzt und über ein Skript verfügt, das 'sudo' verwendet, um das Programm als diesen Benutzer auszuführen. es wird für die Benutzer passwd auf sichere Weise aufgefordert.

+1

Man könnte die Prüfsumme des Passworts vorberechnen und * it * im Skript anstelle des Klartextes speichern und die Prüfsumme der Eingabe dagegen testen. Es kann jedoch immer noch gebrochen werden, aber weniger leicht. –

+1

In diesem Fall kopieren Sie einfach das Skript an einen Ort, an dem Sie Schreibrechte haben, und entfernen Sie den Haken. –