Ich habe ein Skript, um das Starten einiger Server auf dem Terminal zu automatisieren. Dies sind Serverprozesse der Software, die ich entwickle. Sie können mehrmals täglich neu kompiliert und geändert werden. Die Binärdateien können sich an verschiedenen Orten befinden (Arbeitskopien).
Mein Skript verwendet
set sudo to do shell script "sudo -v "
einmal nach dem Root-Passwort zu fragen, erstellt dann ein neues iterm2-Terminalfenster (und einige Tabs) und versucht, die Server mit sudo zu starten:
#!/usr/bin/osascript
on run args
set sudo to do shell script "sudo -v " -- to ask for password once only
tell application "iTerm"
create window with default profile
tell current window
tell current session
write text "sudo /some/server"
end tell
-- more tabs and more sudos go here
end tell
end tell
end run
Bei El Capitan hat alles funktioniert, aber nicht bei High Sierra.
Wenn das sudo
Passwort nicht zwischengespeichert ist, sudo -v
fragt der nach meinem Passwort und fährt dann wie erwartet fort. Wenn ich sudo
vorher gelaufen bin und das Passwort zwischengespeichert ist, sudo -v
fragt der nicht wie erwartet erneut nach einem Passwort. sudo
Aber in beiden Fällen fragt jedes der folgenden s im neuen Fenster nach meinem Passwort, was das Ganze unpraktisch macht.
Wenn ich with administrator privileges
die Initiale hinzufüge sudo
, fragt es in einem Popup-Dialog nach meinem Passwort, aber die folgenden sudo
Aufrufe mit write text
fragen immer noch nach dem Passwort auf der Shell. (Ich verwende write text
und das Terminal, um die Ausgaben dieser Server im Auge zu behalten.)
Ich kann normale sudo-Befehle problemlos ausführen und das Passwort zwischenspeichern.
sudo
Wie kann ich Applescript in einem neuen iTerm2-Fenster verwenden und es nur einmal nach dem Passwort fragen lassen?
BEARBEITEN : Sieht so aus, als ob dies nicht mit Applescript, sondern mit iterm und High Sierra zusammenhängt. Wenn ich ein Terminalfenster mit 2 Registerkarten öffne, muss ich mein Passwort in beiden eingeben, wenn ich z. B. sudo ls
. Danach haben beide Registerkarten das sudo-Passwort zwischengespeichert, aber das Ausführen von sudo in einer Registerkarte bewirkt nicht, dass die andere Registerkarte das zwischengespeicherte sudo-Passwort verwendet.
Die eigentliche Frage ist also wahrscheinlich: Wie bringe ich iTerm2 dazu, das sudo-Passwort zwischenzuspeichern und es zwischen Registerkarten und Fenstern zu teilen?
Versuchen Sie Folgendes hinzuzufügen:
Defaults !tty_tickets
nach /etc/sudoers. Getestet am 10.13.6 (High Sierra).
Aus der Manpage:
Wenn festgelegt, müssen sich Benutzer pro TTY authentifizieren. Wenn dieses Flag aktiviert ist, verwendet sudo für jedes tty einen separaten Datensatz in der Zeitstempeldatei. Wenn deaktiviert, wird ein einziger Datensatz für alle Anmeldesitzungen verwendet. Dieses Flag ist standardmäßig aktiviert.
Benutzer3439894
sudoers
Datei ausgeführt werden? Schau mal in die Manualpage fürsudoers
.Gio Valério
Benutzer3439894
sudoers
Datei vor der Verwendungpassword
mitadministrator privileges
, da das Passwort im Klartext in der AppleScript-Datei gespeichert wird.Allan
sudo
wird nicht in AppleScript gestartet.sudo
wird von einer nicht interaktiven Shell ohne Anmeldung aufgerufen, die von AppleScript aufgerufen wird. Wenn Sie sagen "einige Server starten", können Sie das erläutern, was Sie meinen? Starten Sie einen Dienst (wie Apache) oder starten Sie eine VM (wie VirtualBox). Soll dies auch passieren, wenn der Computer automatisch startet, oder nur, wenn Sie das Skript manuell aufrufen?Gio Valério
Benutzer3439894
sudo <script_name>, I'm prompted for my password and then the script runs all of the
die Befehle „sudo /some/server“ schreibe, ohne erneut nach einem Passwort zu fragen. In macOS 10.13 warten allewrite text "sudo /some/server"
Befehle darauf, dass ich das Passwort erneut eingebe.Benutzer3439894
Benutzer3439894
sudoers
?"Allan
sudo
zuvor ausgeführt habe und das Passwort zwischengespeichert ist, wirdsudo -v
wie erwartet nicht erneut nach einem Passwort gefragt. Dies hängt direkt mit der Art von Shell zusammen, in der er sich befindet;sudo
Anmeldeinformationen werden nicht in separaten Shells zwischengespeichert.Benutzer3439894
sudo
Anmeldeinformationen nicht in separaten Shells zwischengespeichert werden", und das ist nicht ganz richtig, ein typisches Beispiel! Ich kann das Problem des OP reproduzieren! In OS X 10.8.6 und OS X 10.11.6 funktioniert sein Skript wie gewünscht und beabsichtigt , jedoch funktioniert es in macOS 10.13.1 nicht so wie in OS X 10.8.6 und OS X 10.11.6. Es hat sich also etwas zwischen OS X 10.11.6 und macOS 10.13.1 geändert, unter dem ich getestet habe. Während also "sudo
Anmeldeinformationen nicht in separaten Shells zwischengespeichert werden." trifft auf macOS 10.13.1 zu, trifft aber nicht auf OS X 10.8.6 und OS X 10.11.6 zu, wie getestet. Ich gebe zu, ich dachte nicht, dass es funktionieren würde, aber es tat es!Robert