Wie kann ich sudo in 2 Registerkarten dazu bringen, nur einmal nach dem Passwort zu fragen?

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 sudoPasswort nicht zwischengespeichert ist, sudo -vfragt der nach meinem Passwort und fährt dann wie erwartet fort. Wenn ich sudovorher gelaufen bin und das Passwort zwischengespeichert ist, sudo -vfragt der nicht wie erwartet erneut nach einem Passwort. sudoAber in beiden Fällen fragt jedes der folgenden s im neuen Fenster nach meinem Passwort, was das Ganze unpraktisch macht.

Wenn ich with administrator privilegesdie Initiale hinzufüge sudo, fragt es in einem Popup-Dialog nach meinem Passwort, aber die folgenden sudoAufrufe mit write textfragen immer noch nach dem Passwort auf der Shell. (Ich verwende write textund das Terminal, um die Ausgaben dieser Server im Auge zu behalten.)

Ich kann normale sudo-Befehle problemlos ausführen und das Passwort zwischenspeichern.

sudoWie 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?

Haben Sie darüber nachgedacht, diese ausführbaren Dateien so einzustellen, dass sie als Root ohne Passwort in der sudoersDatei ausgeführt werden? Schau mal in die Manualpage für sudoers.
setzen Sie thePassword auf "Password" als String do Shell Script <<YourCommand>> ¬ passwort thePassword mit Administratorrechten
@Gio Valerio, persönlich würde ich die ausführbaren Dateien so einstellen, dass sie als root ohne Passwort ausgeführt werden, in der sudoersDatei vor der Verwendung passwordmit administrator privileges, da das Passwort im Klartext in der AppleScript-Datei gespeichert wird.
Ihre Terminologie hier ist problematisch. sudowird nicht in AppleScript gestartet. sudowird 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?
Ich bin mir nicht sicher, was mit dem Text im Applescript passiert, wenn Sie daraus eine App erstellen, aber die Idee war, zu testen, ob es funktioniert. Danach kann man das System (oder das Programm) nach dem Passwort fragen lassen
@Allan, ich denke, obwohl interessant, befassen sich die Fragen, die Sie gestellt haben, nicht wirklich mit dem Problem, dass das OP ein Skript hat, das in OS X 10.11 wie beabsichtigt und gewollt funktioniert, aber nicht in macOS 10.13. Nachdem ich das Skript in jeder Version des Betriebssystems ausgeführt habe, sehe ich genau, worüber gesprochen wird. Wenn ich in OS X 10.11 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 alle write text "sudo /some/server"Befehle darauf, dass ich das Passwort erneut eingebe.
@Allan, also hat sich etwas geändert, um das zu unterbrechen, was in einer früheren Version des Betriebssystems funktioniert. Übrigens sehe ich wirklich nichts Falsches an der im OP verwendeten Terminologie.
Robert, ich kann Ihr Problem reproduzieren, habe aber im Moment nicht untersucht, was es verursacht. Aus diesem Grund habe ich vorhin kommentiert: "Haben Sie darüber nachgedacht, diese ausführbaren Dateien in der Datei so einzustellen, dass sie als Root ohne Passwort ausgeführt werden sudoers?"
@ user3439894 - Wenn ich sudozuvor ausgeführt habe und das Passwort zwischengespeichert ist, wird sudo -vwie erwartet nicht erneut nach einem Passwort gefragt. Dies hängt direkt mit der Art von Shell zusammen, in der er sich befindet; sudoAnmeldeinformationen werden nicht in separaten Shells zwischengespeichert.
@Allan, Sie haben angegeben, dass " sudoAnmeldeinformationen 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 " sudoAnmeldeinformationen 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!
@ user3439894 sudoers funktioniert gut, ich akzeptiere das gerne, wenn Sie dies als Antwort posten möchten

Antworten (1)

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.