Brak znajomości hasła komplikuje sprawę , ale może rozwiązaniem jest: czy można tymczasowo usunąć hasło użytkownika? (A potem zresetuj go do tego, co było wcześniej.)
Na początek:
Najpierw wyświetl okno logowania. Po prostu wyloguj się z bieżącego użytkownika, użyj szybkiego przełączania użytkowników lub użyj SSH:
cd "/ System / Library / CoreServices / Menu Extras / User.menu / Contents / Resources /"
sudo ./CGSession -suspend
Lub, aby od razu przejść do konkretnego użytkownika, który prawdopodobnie wyświetli okno logowania (to nagle nie działa już na moim 10.5 Leopardzie):
sudo ./CGSession -switchToUserID 501
To, co się teraz pokazuje, zależy trochę od Preferencji systemowych, ale załóżmy, że są to ikony użytkowników i ich nazwy. Aby aktywować nazwę, musielibyśmy wpisać pierwsze litery. Następnie po powrocie pojawia się monit o hasło. Alternatywnie można wybrać dowolną nazwę (np. Naciskając Strzałkę w dół), a następnie nacisnąć klawisz Option-Return, aby wyświetlić monit o podanie dowolnej nazwy użytkownika i hasła. Nie wiem, jak rozpoznać, który ekran jest wyświetlany, ale zapiszmy to na później ...
Tak więc, aby wybrać pierwszą (losową) nazwę użytkownika i nacisnąć Option-Return, wpisz konkretną nazwę użytkownika, naciśnij Return i wpisz hasło:
sudo osascript -e 'powiedz aplikacji „System Events”
kod klucza 125
naciśnięcie klawisza Return przy użyciu opcji w dół
naciśnięcie klawisza „nazwa użytkownika”
opóźnienie 1.0
powrót z klawisza
opóźnienie 1.0
naciśnięcie klawisza „hasło”
opóźnienie 1.0
powrót z klawisza
koniec powiedz „
Powyższe pokazuje błąd, który, o ile wiem, nie ogranicza użycia:
osascript [285]: 3891612: (connectAndCheck) Niezaufane aplikacje nie są
wolno się połączyć lub uruchomić Windows Server przed zalogowaniem.
_RegisterApplication (), NIE POWIODŁO SIĘ, aby ustanowić domyślne połączenie z
WindowServer, _CGSDefaultConnection () ma wartość NULL.
Możesz też użyć skryptu specyficznego dla języka z „ Skryptuj okno logowania za pomocą Pulpitu zdalnego Apple ” (może kiedyś komentarze na tej stronie pokażą lepsze rozwiązanie):
powiedz procesowi „SecurityAgent”
ustaw wartość pola tekstowego 1 grupy 1 okna 1 na „nazwa użytkownika”
ustaw wartość pola tekstowego 2 grupy 1 okna 1 na „hasło”
koniec powiedz
kliknij przycisk „Zaloguj się” w oknie 1 procesu aplikacji „SecurityAgent”
Ale głównym problemem jest to, że nadal potrzebuje hasła . Jednak: oczywiście hasło nie jest potrzebne, gdy użytkownik ma puste hasło. W rzeczywistości dla pustych haseł wystarczy kliknięcie ikony użytkownika. Tak więc, jeśli wysyłanie naciśnięć klawiszy przy użyciu AppleScript jest dopuszczalne, być może „wszystko” pozostaje do ustalenia:
Czy można tymczasowo wyczyścić hasło użytkownika, aby umożliwić rozpoczęcie (lub wznowienie) sesji bez znajomości tego hasła ...?
Czy można uczynić AppleScript odpornym na błędy? Lubić:
- Jak stwierdzić, czy okno logowania jest widoczne? (być może
stat -f%Su /dev/console
może pomóc, ponieważ ustępuje,root
gdy wyświetlane jest okno logowania)
- Jak stwierdzić, które okno logowania jest wyświetlane? (Na przykład: jedna z ikonami i nazwami logowania lub listą rozwijaną, a może tylko monit o hasło, jeśli ktoś zdecydował się na przełączenie na określonego użytkownika?)
- Pozbądź się opóźnień.
- Co z tym komunikatem o błędzie?
(Uwaga do testowania: podczas korzystania z udostępniania ekranu wydaje się, że ustawienie preferencji Podczas kontrolowania komputerów: Szyfrowanie haseł i naciśnięć klawiszy zachowuje również połączenie, gdy wyświetlane jest okno logowania lub po pomyślnym zalogowaniu użytkownika. Podczas korzystania z funkcji Szyfruj całą sieć dane, a następnie mój Mac musi ponownie nawiązać połączenie Udostępniania ekranu za każdym razem, gdy wyświetlane jest logowanie lub użytkownik jest przełączany).
sudo osascript -e 'tell app "System Events" to keystroke "password" & return'
. Gdy ekran jest zablokowany, wprowadzenie nazwy użytkownika administracyjnego i hasła wznawia sesję innego użytkownika. Ale jak rozpocząć sesję dla dowolnego użytkownika bez znajomości hasła? (Dla pewności, jeśli znasz hasło: innym obejściem może być Udostępnianie ekranu, które działa również w przypadku ekranu logowania. Musisz ponownie podłączyć Udostępnianie ekranu po uruchomieniu lub wznowieniu określonej sesji użytkownika.)su
w wierszu polecenia, ale w przypadku sesji GUI. Lub tak, jak po zablokowaniu ekranu, gdzie wprowadzenie nazwy użytkownika administracyjnego i hasła wznawia sesję drugiego użytkownika.)Ostatnio to badałem.
Umieść to w stosie PAM aplikacji lub przetestuj za pomocą sshd:
To długa droga do uzyskania sesji graficznej, która jest bardzo zbliżona do sesji użytkownika wyłączonego. W szczególności znajduje się we właściwej przestrzeni nazw bootstrap i ma właściwe porty bootstrap (tak myślę). Możesz sprawdzić źródło pod kątem tego, co robi pam_launchd; używa rozsądnej biblioteki prywatnej (funkcje vproc_priv.h w libvprop) do wywoływania procedur Macha do konfigurowania portów i przestrzeni nazw. Pasuje do wszystkich (ograniczonych) dokumentów, które Apple udostępnia dla wywołań Macha.
Następnie musisz ustawić identyfikator użytkownika kontroli na identyfikator użytkownika z interfejsem API BSM, w przeciwnym razie okno logowania nie będzie z tobą rozmawiać na Lion.
Sesja wygląda teraz bardzo blisko sesji wyłączonej, jeśli zaznaczysz opcję „launchctl blist”, a niektóre procesy i usługi ładnie ożywają (np. Pulpit itd.). W rzeczywistości działa wszystko oprócz Findera i loginwindow. Do momentu uruchomienia loginwindow nie można uruchomić aplikacji graficznej, a proces loginwindow na sesję jest zawsze spawnowany jako bezpośrednie dziecko globalne. W jaki sposób można dotknąć procesu loginwindow, aby uruchomić nowe loginwindow w nowej sesji? Nie mogę znaleźć sposobu na założenie ostatniego kawałka!
Jakakolwiek pomoc w wypełnieniu tej odpowiedzi została przyjęta z wdzięcznością.
źródło
uruchomienie polecenia za pomocą sudo pozwala ustawić skrypt jako nieczytelny dla standardowych użytkowników. To nie jest idealne, ale jeśli twój administrator jest już zagrożony, gra jest skończona!
chmod nazwa skryptu
mój skrypt wygląda tak, działa zdalnie, gdy jeden użytkownik już działa, aby przełączyć się na drugiego użytkownika przez SSH (testowane na Snow Leopard 10.6.3):
źródło
Musiałem zalogować tego samego użytkownika na 25 różnych stacjach roboczych, aby dokonać aktualizacji oprogramowania. Nie byłem w stanie niezawodnie uruchomić polecenia „osascript -e ...” z sesji SSH, nawet z uprawnieniami sudo. Byłem jednak w stanie uruchomić go za pomocą Pulpitu zdalnego Apple. Jeśli masz ARD:
Z przyjemnością znalazłem wszystkie 25 komputerów Mac Minis z systemem Finder jako użytkownik w ciągu niecałej minuty. Dla przypomnienia, z ARD nie musisz wpisywać hasła sudo na każdym komputerze. Wiersze, które należy wkleić w oknie dialogowym poleceń to (podstawienie prawidłowej nazwy użytkownika i hasła):
źródło