Erwarten Sie und Sudo Timeout

1650
Codrguy

Ich habe ein Hauptshellskript, das den Benutzer zur Eingabe seines Passworts auffordert. Ich möchte dann ein Expect-Skript aufrufen, während ich das Kennwort übergeben habe. Dieses Expect-Skript führt 3 Sudo-Befehle aus.

Ich weiß, dass die Linux-Boxen, auf die mein Skript laufen soll, timestamp_timeout auf einen Wert in ihren Sudoers gesetzt haben. Mein Problem ist, dass ich eine allgemeine Vorstellung davon habe, wie ich diese Erwartung schreibe, aber ich weiß nicht, wie ich mit den folgenden Fällen umgehen soll:

1) Ich kann das Passwort an den ersten Sudo-Befehl senden. Dieses Sudo löscht ein großes Verzeichnis, dessen Löschen einige Minuten dauern kann. Dies kann den angegebenen Wert für timestamp_timeout überschreiten. Wie kann ich also eine Passwortabfrage für meinen zweiten und dritten sudo-Befehl optional erwarten lassen?

2) Sagen Sie aus einem seltsamen Grund, dass das Skript stirbt oder der Benutzer es abbricht. Wenn er versucht, es erneut auszuführen, befinden wir uns noch in der Zeit von timestamp_timeout. Dies erfordert, dass das Expect-Passwort für den ersten Befehl ebenfalls optional ist.

Folgendes habe ich bisher:

 #!/usr/bin/expect  set password [lindex $argv 0] spawn sudo rm -rvf /mnt/repo expect "*?assword:*" send "$password\r" send "sudo mkdir -v /mnt/hwrrepo" expect "*?assword:*" send "$password\r"; send "sudo chmod -R 777 /mnt/hwrrepo" expect "*?assword:*" send "$password\r"; interact 
0

1 Antwort auf die Frage

0
Codrguy

Am Ende benutzte ich das -k-Flag von sudo, um den Zeitstempel für ungültig zu erklären. Also fügte ich einfach das Flag zu jedem Sudo-Aufruf hinzu und lass das Passwort passieren.