Wenn Sie das Kennwort nicht kennen, wird es kompliziert, aber möglicherweise lautet die Lösung: Ist es möglich, das Kennwort eines Benutzers vorübergehend auszublenden? (Und setzen Sie es danach auf das zurück, was es vorher war.)
Als Start:
Lassen Sie zunächst das Anmeldefenster anzeigen. Melden Sie einfach den aktuellen Benutzer ab, verwenden Sie die schnelle Benutzerumschaltung oder verwenden Sie SSH:
cd "/ System / Library / CoreServices / Menü Extras / User.menu / Contents / Resources /"
sudo ./CGSession -suspend
Oder, um sofort zu einem bestimmten Benutzer zu wechseln, in dem wahrscheinlich das Anmeldefenster angezeigt wird (dies funktioniert auf meinem 10.5 Leopard plötzlich nicht mehr):
sudo ./CGSession -switchToUserID 501
Was jetzt angezeigt wird, hängt ein bisschen von den Systemeinstellungen ab, aber nehmen wir an, es sind die Symbole der Benutzer und ihre Namen. Um einen Namen zu aktivieren, müssten wir die ersten Buchstaben eingeben. Nach Return erscheint die Passwortabfrage. Alternativ kann man auswählen beliebigen Namen (z. B. durch Drücken des Pfeils nach unten) und dann die Optionstaste drücken, um zur Eingabe eines beliebigen Benutzernamens und seines Kennworts aufgefordert zu werden . Ich weiß nicht, wie man erkennen kann, welcher Bildschirm angezeigt wird, aber das sollten wir für später aufheben ...
Um also den ersten (zufälligen) Benutzernamen auszuwählen und die Wahltaste-Return-Taste zu drücken, geben Sie einen bestimmten Benutzernamen ein, drücken Sie die Eingabetaste und geben Sie das Passwort ein:
sudo osascript -e 'tell app "Systemereignisse"
Schlüsselcode 125
Tastatureingabe mit der Option nach unten
Tastendruck "der Benutzername"
Verzögerung 1.0
Tastatureingabe zurück
Verzögerung 1.0
Tastendruck "das Passwort"
Verzögerung 1.0
Tastatureingabe zurück
Ende erzählen '
Das obige zeigt einen Fehler, der, soweit ich das beurteilen kann, die Nutzung nicht einschränkt:
osascript [285]: 3891612: (connectAndCheck) Nicht vertrauenswürdige Apps sind dies nicht
darf vor der Anmeldung eine Verbindung zu Windows Server herstellen oder Windows Server starten.
_RegisterApplication (), FAILED TO stellt die Standardverbindung zu her
Der WindowServer _CGSDefaultConnection () ist NULL.
Verwenden Sie alternativ das sprachspezifische Skript aus " Anmeldefenster über Apple Remote Desktop skripten " (möglicherweise zeigen die Kommentare auf dieser Site eines Tages eine bessere Lösung):
Tell-Prozess "SecurityAgent"
setze Wert von Textfeld 1 von Gruppe 1 von Fenster 1 auf "den Benutzernamen"
setze Wert von Textfeld 2 von Gruppe 1 von Fenster 1 auf "das Passwort"
Ende erzählen
Klicken Sie auf die Schaltfläche "Anmelden" in Fenster 1 des Anwendungsprozesses "SecurityAgent".
Das Hauptproblem ist jedoch, dass das Kennwort weiterhin benötigt wird . Allerdings: Offensichtlich wird kein Passwort benötigt, wenn ein Benutzer ein leeres Passwort hat. Bei leeren Passwörtern genügt ein einfaches Klicken auf das Symbol eines Benutzers. Wenn das Senden von Tastenanschlägen mit AppleScript akzeptabel ist, müssen Sie möglicherweise "alles" herausfinden:
Ist es möglich, das Kennwort eines Benutzers vorübergehend auszublenden, um das Starten (oder Fortsetzen) der Sitzung zu ermöglichen, ohne dieses Kennwort zu kennen ...?
Kann man das AppleScript fehlerfrei machen? Mögen:
- Wie kann ich feststellen, ob das Anmeldefenster sichtbar ist? (
stat -f%Su /dev/console
Kann vielleicht helfen, da sich das ergibt,root
während das Anmeldefenster angezeigt wird)
- Wie kann ich feststellen, welches Anmeldefenster angezeigt wird? (Zum Beispiel: eines mit Symbolen und Anmeldenamen oder einer Dropdown-Liste oder nur einer Passwortabfrage, wenn jemand ausgewählt hat, zu einem bestimmten Benutzer zu wechseln?)
- Werde die Verzögerungen los.
- Was ist mit dieser Fehlermeldung?
(Ein Hinweis zum Testen: Bei Verwendung der Bildschirmfreigabe scheint das Festlegen der Einstellung Bei der Steuerung von Computern: Kennwörter und Tastenanschläge verschlüsseln behält die Verbindung auch dann bei, wenn das Anmeldefenster angezeigt wird oder wenn sich ein Benutzer erfolgreich angemeldet hat. Bei Verwendung der Option Alle Netzwerke verschlüsseln Daten, dann muss mein Mac die Bildschirmfreigabeverbindung jedes Mal wiederherstellen, wenn ein Login angezeigt oder ein Benutzer gewechselt wird.)
sudo osascript -e 'tell app "System Events" to keystroke "password" & return'
. Wenn der Bildschirm gesperrt ist, wird die Sitzung des anderen Benutzers fortgesetzt, wenn ein administrativer Benutzername und ein Kennwort eingegeben werden . Aber wie kann man eine Sitzung für einen Benutzer starten, ohne das Passwort zu kennen? (Nur um sicherzugehen, wenn Sie das Kennwort kennen: Eine andere Problemumgehung ist möglicherweise die Bildschirmfreigabe, die auch für den Anmeldebildschirm funktioniert. Sie müssen die Bildschirmfreigabe erneut herstellen, nachdem eine bestimmte Benutzersitzung gestartet oder fortgesetzt wurde.)su
auf der Eingabeaufforderung, aber dann für eine GUI - Sitzung Oder wie wenn der Bildschirm gesperrt ist, in dem ein administrativen Benutzername und Passwort. Wieder den anderen Sitzung des Benutzers.)Ich habe das kürzlich untersucht.
Fügen Sie dies in den PAM-Stack Ihrer App ein oder testen Sie es mit sshd:
Dies trägt wesentlich dazu bei, dass Sie eine grafische Sitzung erhalten, die einer ausgelagerten Benutzersitzung ziemlich nahe kommt. Insbesondere befindet es sich im richtigen Bootstrap-Namespace und verfügt über die richtigen Bootstrap-Ports (glaube ich). Sie können in der Quelle nachsehen, was pam_launchd bewirkt. Es verwendet eine vernünftig aussehende private Bibliothek (vproc_priv.h-Funktionen in libvprop), um die Mach-Routinen zum Einrichten der Ports und des Namespace aufzurufen. Es passt zu allen (eingeschränkten) Dokumenten, die Apple für die von Mach abgeleiteten Systemaufrufe bereitstellt.
Als nächstes müssen Sie Ihre Audit-Benutzer-ID auf die des Benutzers mit der BSM-API einstellen, sonst wird das Anmeldefenster nicht mit Ihnen in Lion kommunizieren.
Die Sitzung ähnelt jetzt einer ausgeschalteten Sitzung, wenn Sie "launchctl blist" aktivieren und einige Prozesse und Dienste gut zum Leben erwecken (z. B. das Pasteboard usw.). Tatsächlich läuft alles außer Finder und Login-Fenster. Solange das Anmeldefenster nicht ausgeführt wird, können Sie keine grafische Anwendung starten, und der Anmeldefensterprozess pro Sitzung wird immer als direktes untergeordnetes Element des globalen Prozesses gestartet. Wie kann man den Anmeldefensterprozess anstoßen, um ein neues Anmeldefenster in der neuen Sitzung zu starten? Ich kann keinen Weg finden, um das letzte Stück in Position zu bringen!
Jede Hilfe zum Ausfüllen dieser Antwort dankbar erhalten.
quelle
Wenn Sie den Befehl mit sudo ausführen, können Sie festlegen, dass das Skript von Standardbenutzern nicht gelesen werden kann. Es ist nicht perfekt, aber wenn Ihr Administrator bereits gefährdet ist, ist das Spiel trotzdem vorbei!
chmod ur scriptname
Mein Skript sieht so aus, es funktioniert remote, wenn ein Benutzer bereits ausgeführt wird, und wechselt per SSH zu einem zweiten Benutzer (getestet auf Snow Leopard 10.6.3):
quelle
Ich musste denselben Benutzer an 25 verschiedenen Arbeitsstationen anmelden, um ein Software-Update durchzuführen. Ich konnte den Befehl 'osascript -e ...' in SSH-Sitzungen nicht zuverlässig ausführen, auch nicht mit Sudo-Berechtigungen. Ich konnte es jedoch über Apple Remote Desktop ausführen. Wenn Sie ARD haben:
Ich war hocherfreut, alle 25 Mac Minis, auf denen Finder ausgeführt wird, innerhalb von weniger als einer Minute als Benutzer zu finden. Um es noch einmal zu wiederholen: Mit ARD müssen Sie nicht auf jedem Computer das sudo-Kennwort eingeben. Die Zeilen, die Sie in das Befehlsdialogfeld einfügen müssen, lauten (durch Ersetzen eines gültigen Benutzernamens und Kennworts):
quelle