So lassen Sie sudo nicht ablaufen, während das Skript ausgeführt wird [duplizieren]
Manchmal muss ich stundenlang ein Skript ausführen, in dem einige Befehle erforderlich sind sudo
. Wenn ich das sudo
Passwort jedoch nicht regelmäßig überprüfe und erneut eingebe , wird der sudo: timed out reading password
Fehler angezeigt , der manchmal das Ganze beschädigt . Ich möchte nicht verwenden, sudo myscript.sh
da einige der Befehle ohne ausgeführt werden sollten sudo
.
Ich möchte, dass das sudo
zwischengespeicherte Kennwort für das Skript für die gesamte Dauer des Skripts erhalten bleibt, ohne den Rest des Systems zu ändern ( sudo
Persistenz nur für dieses 1 Skript).
Gibt es eine Möglichkeit, sudo
für die gesamte Dauer des Skripts und nur für das 1-Skript das Letzte zu machen ?
Antworten
Möglichkeit: Führen Sie das Skript mit aus sudo myscript.sh
. Führen Sie im Skript Befehle aus, die ohne sudo
diese Methode ausgeführt werden sollten:
sudo -u "$SUDO_USER" foo args
(Vielleicht mit der richtigen Logik, falls das gesamte Skript jemals ohne ausgeführt wird sudo
). Der Root-Benutzer muss sich nicht authentifizieren sudound muss daher kein Kennwort eingeben, um einen Befehl als anderer Benutzer auszuführen .
Abhängig davon, wie groß das Skript ist (wie viel Sie ändern müssen) und wie Sie das Ganze mit sudo
Ihnen ausführen möchten, gefällt Ihnen die Idee möglicherweise oder nicht. In Ihrem aktuellen Ansatz ist nicht erhöhter Code die Standardeinstellung, wobei Zeilen sudo
explizite Ausnahmen darstellen. Mein Ansatz stellt dies auf den Kopf. Sie müssen beim Erstellen und Testen des Skripts vorsichtiger sein. Ich gebe zu, dass dies nicht die beste Vorgehensweise ist. dennoch löst es das Problem des Ablaufens sudo
.
Persönlich würde ich diese Lösung für ein lang laufendes Skript verwenden, das nicht zu kompliziert ist (einfache Schleife, wenige Befehle). Ich würde es mir zweimal überlegen, bevor ich ein kompliziertes Skript neu erstelle.
Ein anderer Ansatz besteht darin, die zwischengespeicherten Anmeldeinformationen im Hintergrund regelmäßig zu aktualisieren. Standardmäßig sind dies pro tty (siehe tty_tickets). Gehen Sie wie folgt vor:
sudo -v # to enter your password once
while sleep 300; do sudo -v; done & # adjust the interval if needed
myscript.sh
Vergessen Sie nicht, den Hintergrundjob zu beenden, wenn er nicht mehr benötigt wird. Das Skript selbst kann einen solchen Job starten. Dann möchten Sie wahrscheinlich, dass einige Traps im Skript den Job automatisch beenden, wenn das Skript beendet wird.