2012-05-15 7 views
6

Zum Beispiel ausgeführt wird, sagen, wenn ich ein Skript zu sagen:automatisch ein Kennwort, wenn ein Bash-Skript

#!/bin/bash 
sudo setpci -s 00:02.0 F4.B=00 

Wie kann ich das root-Passwort in das Skript setzen, so dass sie es als das Passwort akzeptiert, wenn es liest und führt die sudo-Zeile aus (also muss ich es nicht manuell eingeben)?

Antwort

24

eine expect Sitzung in Ihrem Bash-Skript Laichen ist in der Regel, wie Sie interaktive Eingabeaufforderungen automatisieren.

z.B.

expect -c " 
spawn sudo setpci -s 00:02.0 F4.B=00 
expect -nocase \"password:\" {send \"$PASS\r\"; interact} 
" 

Beachten Sie, dass dies nicht die empfohlene Vorgehensweise in diesem Fall, da es eine riesige Sicherheitslücke Ihres Root-Passwort in einem Bash-Skript zu speichern.

Die richtige Lösung wäre, um Ihre /etc/sudoers/ zu bearbeiten Sie nicht für das binäre, ein Kennwort aufzufordern.

#in /etc/sudoers 
neohexane ALL=(ALL) NOPASSWD : /usr/bin/setpci 
+1

Gibt es einen Grund, warum Sie nicht den '/ etc/sudoers /' Ansatz nutzen können. Das wäre meine Empfehlung. – cmh

+3

"wird nicht empfohlen" scheint eine Untertreibung. Ich würde die Expect-Lösung komplett entfernen. Wenn dies nicht seine eigene persönliche Box ist, sollte er das root-Passwort in einer einfachen Textdatei nicht herumliegen lassen. – chepner

+2

Ich denke, es ist es wert, als Beispiel für die Verwendung von expect zu halten. Ich werde betonen, wie es nicht empfehlenswert ist. – cmh

Verwandte Themen