Grafisches Mac-Login von SSH aus einleiten

8070
Sophie Alpert

Wie kann ich das grafische Mac-Login von SSH herbeiführen? Gibt es eine Möglichkeit, den loginwindowProzess zu veranlassen, eine Benutzersitzung zu starten, indem ein Befehl ausgeführt wird, wenn über SSH aus der Ferne als Administrator unter Mac OS X angemeldet ist?

Wenn sich der Computer im Anmeldefenster befindet (derzeit ist kein Benutzer angemeldet), möchte ich, dass die Sitzung eines Benutzers geöffnet wird, als hätte ich auf den Benutzernamen geklickt und ein Kennwort eingegeben.

Lösungen, bei denen keine Skripte für die grafische Benutzeroberfläche erstellt werden, werden sehr bevorzugt, aber diese Seite von Apple KB kann für diejenigen interessant sein, die diesen Weg gehen.

15

4 Antworten auf die Frage

4
Arjan

Wenn Sie das Kennwort nicht kennen, ist dies kompliziert. Möglicherweise lautet die Lösung: Kann das Kennwort eines Benutzers vorübergehend ausgeblendet werden? (Und danach auf alles zurücksetzen, was es vorher war.)

Als Start:

Lassen Sie sich zunächst das Anmeldefenster anzeigen. Melden Sie sich einfach beim aktuellen Benutzer ab, verwenden Sie die schnelle Benutzerumschaltung oder verwenden Sie SSH:

cd "/ System / Library / CoreServices / Menü Extras / Benutzermenü / Inhalt / Ressourcen /" sudo ./CGSession -suspend 

Oder um sofort zu einem bestimmten Benutzer zu wechseln, der wahrscheinlich das Anmeldefenster anzeigt (dies funktioniert auf meinem 10.5 Leopard plötzlich nicht mehr):

sudo ./CGSession -switchToUserID 501

Was jetzt gezeigt wird, hängt ein wenig von den Systemeinstellungen ab. Nehmen wir jedoch an, es sind die Symbole der Benutzer und deren Namen. Um einen Namen zu aktivieren, müssen wir die ersten Buchstaben eingeben. Nach der Rückkehr wird die Kennwortaufforderung angezeigt. Alternativ können Sie einen beliebigen Namen auswählen (z. B. durch Drücken der Pfeiltaste nach unten) und dann die Wahltaste drücken, um nach einem Benutzernamen und seinem Kennwort gefragt zu werden. Ich weiß nicht, wie man erkennen kann, welcher Bildschirm angezeigt wird, aber wir sollten das für später speichern ...

Um den ersten (zufälligen) Benutzernamen auszuwählen und Option-Return zu drücken, geben Sie einen bestimmten Benutzernamen ein, drücken Sie die Eingabetaste und geben Sie das Kennwort ein:

sudo osascript -e 'tell app "Systemereignisse" Schlüsselcode 125 Tastenanschlag Rückkehr mit der Option nach unten Tastenanschlag "der Benutzername" Verzögerung 1,0 Tastenanschlag Rückkehr Verzögerung 1,0 Tastenanschlag "das Passwort" Verzögerung 1,0 Tastenanschlag Rückkehr Ende erzählen '

Das obige zeigt einige Fehler, die, soweit ich das beurteilen kann, die Nutzung nicht einschränken:

Javascript [285]: 3891612: (connectAndCheck) Nicht vertrauenswürdige Apps sind es nicht  darf sich vor dem Login mit Windows Server verbinden oder starten. _RegisterApplication (), Fehler beim Herstellen der Standardverbindung zu der WindowServer _CGSDefaultConnection () ist NULL.

Verwenden Sie alternativ das sprachspezifische Skript aus " Skript das Anmeldefenster über Apple Remote Desktop " (möglicherweise zeigen die Kommentare auf dieser Site eines Tages eine bessere Lösung):

Prozess "SecurityAgent" mitteilen Setzen Sie den Wert des Textfeldes 1 der Gruppe 1 des Fensters 1 auf "den Benutzernamen". Setzen Sie den Wert des Textfeldes 2 der Gruppe 1 des Fensters 1 auf "das Kennwort". ende sagen Klicken Sie auf die Schaltfläche "Anmelden" in Fenster 1 des Anwendungsprozesses "SecurityAgent".

Das Hauptproblem ist jedoch: Dieses benötigt immer noch das Passwort . Allerdings ist natürlich kein Passwort erforderlich, wenn ein Benutzer ein leeres Passwort hat. Für leere Passwörter genügt es, nur auf das Symbol eines Benutzers zu klicken. Wenn also das Senden von Tastatureingaben mit AppleScript akzeptabel ist, bleibt möglicherweise "alles" übrig:

  • Kann das Kennwort eines Benutzers vorübergehend ausgeblendet werden, um die Sitzung zu starten (oder fortzusetzen), ohne dieses Kennwort zu kennen ...?

  • Kann man das AppleScript fehlersicher machen? Mögen:

    • Wie können Sie feststellen, ob das Anmeldefenster sichtbar ist? ( stat -f%Su /dev/consolekann vielleicht helfen, da dies nachlässt,root während das Anmeldefenster angezeigt wird)
    • Wie kann ich feststellen, welches Anmeldefenster angezeigt wird? (Zum Beispiel: eine zeigt Icons und Login-Namen oder eine Dropdown-Liste oder vielleicht nur eine Kennwortaufforderung, wenn jemand gewählt hat, zu einem bestimmten Benutzer zu wechseln?)
    • Beseitigen Sie die Verzögerungen.
    • Was ist mit dieser Fehlermeldung?

(Ein Hinweis für die Prüfung: bei der Verwendung von Bildschirmfreigabe es scheint, dass die Präferenz Einstellung Bei der Steuerung Computer: Verschlüsseln Sie Passwörter und Tastatureingaben nur behält auch die Verbindung, wenn das Anmeldefenster angezeigt wird, oder nachdem ein Benutzer erfolgreich angemeldet hat bei der Verwendung. Verschlüsseln der gesamte Netzwerkes Daten dann muss mein Mac wieder herzustellen ist, um die Bildschirmfreigabe Verbindung jedes Mal, wenn ein Login gezeigt oder ein Benutzer umgeschaltet wird.)

Dies ist ein guter Anfang, hat aber zwei Probleme. Erstens funktioniert es nicht, wenn Sie sich im Anmeldefenster befinden, was ich wollte, und es fragt nach einem Passwort, das ich lieber nicht hätte. Da es root ist, sollte es in der Lage sein, Benutzer ohne das Passwort zu wechseln. Sophie Alpert vor 14 Jahren 0
Aha. Ich weiß nicht einmal, wie ich mich als anderer Benutzer einloggen soll, wenn Sie am Computer selbst sitzen. Daher gibt keine Zigarre für "sudo osascript -e" der App "System Events" den Tastendruck "Kennwort" und "Zurück" an. Wenn der Bildschirm gesperrt ist, wird durch Eingabe eines administrativen Benutzernamens und Kennworts * die Sitzung des anderen Benutzers fortgesetzt. Aber wie kann man eine Sitzung für jeden Benutzer * starten *, ohne das Passwort zu kennen? (Nur um sicher zu sein, wenn Sie das Kennwort kennen: Eine andere Problemumgehung könnte die Bildschirmfreigabe sein, die auch für den Anmeldebildschirm funktioniert. Sie müssen die Bildschirmfreigabe erneut verbinden, nachdem eine bestimmte Benutzersitzung gestartet oder fortgesetzt wurde.) Arjan vor 14 Jahren 0
Das ist gut. Ich würde jedoch eine Lösung vorziehen, ohne Tastatureingaben manuell zu simulieren. Sophie Alpert vor 14 Jahren 0
Ich frage mich, ob jemand weiß, wie man eine Sitzung für einen anderen beginnt. Ohne die obige Antwort zu berücksichtigen, kann sich ein Administrator bei der täglichen Verwendung von Mac OS X: ** als anderer Benutzer anmelden, ohne dessen Passwort zu kennen? ** (Genau wie `su` an der Eingabeaufforderung, aber dann für eine GUI-Sitzung. Oder als wäre der Bildschirm gesperrt, wenn die Eingabe eines administrativen Benutzernamens und eines Kennworts * die Sitzung des anderen Benutzers fortsetzt.) Arjan vor 14 Jahren 2
Möglicherweise ist dies nicht ohne AppleScript-Tastatureingabe möglich: http://docs.info.apple.com/article.html?path=RemoteDesktop/3.0/de/ARDC869.html Sophie Alpert vor 14 Jahren 0
Hmmm, guter Fund, dieser Artikel! Wenn AppleScript und die Tastatureingaben akzeptabel sind, sollten wir die Suche dann fortsetzen, indem wir einen Weg finden, das Kennwort vorübergehend auszublenden. Arjan vor 14 Jahren 0
Ich würde auf jeden Fall eine Lösung vorziehen, die kein gefälschtes Tastenanschlag erfordert. Sophie Alpert vor 14 Jahren 0
Okidoki, dann kann ich dir nicht helfen. Arjan vor 14 Jahren 0
1
Nicholas Wilson

Ich habe das kürzlich untersucht.

Fügen Sie dies in den PAM-Stack Ihrer App ein oder testen Sie mit sshd:

session required pam_launchd.so launchd_session_type=Aqua 

Dies führt zu einer grafischen Sitzung, die ziemlich nahe an einer ausgeschalteten Benutzersitzung liegt. Insbesondere ist es im richtigen Bootstrap-Namespace und hat die richtigen Bootstrap-Ports (denke ich). Sie können die Quelle überprüfen, was pam_launchd tut. Es verwendet eine vernünftig aussehende private Bibliothek (Funktionen von vproc_priv.h in libvprop), um die Mach-Routinen zum Einrichten der Ports und des Namespaces aufzurufen. Es passt zu allen (eingeschränkten) Dokumenten, die Apple für die von Mach abgeleiteten Syscalls bereitstellt.

Als Nächstes müssen Sie Ihre Audit-Benutzer-ID auf die des Benutzers mit der BSM-API setzen. Andernfalls wird das Anmeldefenster nicht mit Lion in Verbindung treten.

Wenn Sie "launchctl blist" aktivieren, ist die Sitzung einer ausgeschalteten Sitzung sehr nahe, und einige Prozesse und Dienste werden sehr schön (z. B. das Pasteboard usw.). In der Tat läuft alles außer Finder und Login-Fenster. Bis zum Ausführen des Anmeldefensters können Sie jedoch keine grafische Anwendung starten, und der Anmeldefensterprozess pro Sitzung wird immer als direktes untergeordnetes Element der globalen Anwendung erzeugt. Wie kann der Anmeldefensterprozess gestartet werden, um in der neuen Sitzung ein neues Anmeldefenster zu starten? Ich kann keinen Weg finden, um das letzte Stück in Position zu bringen!

Jede Hilfe, die diese Antwort vervollständigt, ist dankbar erhalten worden.

0
zeigerpuppy

Wenn Sie den Befehl mit Sudo ausführen, können Sie festlegen, dass das Skript für Standardbenutzer nicht lesbar ist. Es ist nicht perfekt, aber wenn Ihr Admin-Benutzer bereits gefährdet ist, ist das Spiel sowieso vorbei!

chmod ur scriptname

mein Skript sieht so aus, es funktioniert remote, wenn ein Benutzer bereits läuft, um per SSH zu einem zweiten Benutzer zu wechseln (getestet auf Snow Leopard 10.6.3):

#!/bin/bash #go to login window /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -switchToUserID 503  osascript -e 'tell app "System Events" keystroke "password" delay 1.0 keystroke return end tell'  exit 
0
William H. Hooper

Ich musste denselben Benutzer an 25 verschiedenen Arbeitsstationen anmelden, um ein Software-Update durchzuführen. Ich konnte den Befehl 'osascript -e ...' nicht zuverlässig von SSH-Sitzungen aus ausführen, selbst mit Sudo-Berechtigungen. Ich konnte es jedoch über Apple Remote Desktop ausführen. Wenn Sie eine ARD haben:

  1. Wählen Sie Ihre Maschinen aus
  2. Wecken Sie sie auf und melden Sie sie ggf. von anderen Benutzern ab
  3. Wählen Sie "UNIX-Befehl senden ..." aus dem Menü "Verwalten"
  4. Fügen Sie Arjans Skript (das Wort 'Sudo' weggelassen) in das Befehlsfenster ein
  5. Wählen Sie "Befehl ausführen als: Benutzer: root" aus und geben Sie ihn ein.

Ich war sehr erfreut, alle 25 Mac Minis, die Finder als Benutzer ausgeführt haben, innerhalb einer Minute zu finden. Um es noch einmal zu wiederholen, mit ARD müssen Sie nicht auf jedem Rechner das sudo-Passwort eingeben. Die Zeilen, die Sie in den Befehlsdialog einfügen müssen, lauten (ersetzen einen gültigen Benutzernamen und ein gültiges Kennwort):

osascript -e 'tell app "System Events" key code 125 keystroke return using option down keystroke "the username" delay 1.0 keystroke return delay 1.0 keystroke "the password" delay 1.0 keystroke return end tell'