Индуцировать графический вход Mac из SSH

Как я вызываю графический вход в систему Mac из SSH? Есть ли способ сделать loginwindow процесс начать сеанс пользователя, выполнив команду при удаленном входе в систему через SSH в качестве администратора на Mac OS X?

когда машина находится в окне входа в систему (пользователь не вошел в систему), я хочу, чтобы открыть сеанс пользователя, как если бы я нажал на имя пользователя и ввести пароль.

решения, которые не включают в себя сценарии GUI, являются предпочтительными, но этот Apple KB страница может быть интересна для тех, кто идет по этому пути.

17
задан random
26.11.2022 7:14 Количество просмотров материала 3303
Распечатать страницу

4 ответа

Не зная пароля делает вещи сложными, но, возможно, решение:можно ли временно очистить пароль пользователя? (и после этого сбросить его к тому, что это было раньше.)

для начала:

во-первых, сделать окно входа в систему для отображения. Просто выйдите из системы текущего пользователя, используйте быстрое переключение пользователей или используйте SSH:

cd "/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/"
sudo ./CGSession -suspend

или, чтобы сразу переключиться на конкретного пользователя, который, вероятно, покажет окно входа в систему (это вдруг больше не работает на моем 10.5 Leopard):

sudo ./CGSession -switchToUserID 501

то, что показано сейчас, немного зависит от системных настроек, но давайте предположим, что это значки пользователей и их имена. Чтобы активировать имя, нам нужно ввести первые буквы. Затем, после возвращения, запрос пароля показывает. В качестве альтернативы можно выбрать любой имя (например, нажав стрелку вниз), а затем нажмите Option-Return, чтобы получить запрос на оба любой имя пользователя и его пароль. Я не знаю, как можно сказать, какой экран отображается, но давайте оставим это на потом...

Итак, чтобы выбрать первое (случайное) имя пользователя и нажмите Option-Return, введите конкретное имя пользователя, нажмите Return и введите пароль:

sudo 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'

выше показана некоторая ошибка, которая, насколько я могу судить, не ограничивает использование:

osascript[285] : 3891612: (connectAndCheck) Untrusted apps are not 
    allowed to connect to or launch Window Server before login.
_RegisterApplication(), FAILED TO establish the default connection to
    the WindowServer, _CGSDefaultConnection() is NULL.

альтернативно, используйте специфичный для языка скрипт из "скрипт окно входа через Apple Remote Desktop "(возможно, однажды комментарии на этом сайте покажут лучшее решение):

tell process "SecurityAgent"
  set value of text field 1 of group 1 of window 1 to "the username"
  set value of text field 2 of group 1 of window 1 to "the password"
end tell
click button "Log In" of window 1 of application process "SecurityAgent"

но главная проблема-это: для этого еще нужен пароль. Однако: очевидно, что пароль не требуется, если у пользователя пустой пароль. Фактически, для пустых паролей достаточно просто щелкнуть значок пользователя. Итак, если отправка нажатий клавиш с помощью AppleScript приемлема, то, возможно, "все", что осталось выяснить:

  • можно ли временно очистить пользователя пароль, позволяющий начать (или возобновить) сеанс, не зная этого пароля...?

  • можно ли сделать AppleScript безошибочным? Like:

    • как рассказала if окно входа в систему отображается? (возможно stat -f%Su /dev/console могу помочь, а что дает root при отображении окна входа в систему)
    • как рассказала , который отображается окно входа? (Например: один показывает значки и имена входа или выпадающий список, или, может быть, только запрос пароля, если кто-то решил переключиться на определенного пользователя?)
    • избавиться от задержек.
    • как насчет этого сообщения об ошибке?

(примечание для тестирования: при использовании совместного использования экрана кажется, что установка предпочтения при управлении компьютерами: шифруйте пароли и нажатия клавиш только также сохраняет связь когда появится окно входа в систему, или после того как пользователь успешно зарегистрированный. При использовании шифровать все сетевые данные затем мой Mac должен заново устанавливать подключение общего доступа к экрану при каждом отображении имени входа или переключении пользователя.)

4
отвечен Arjan 2022-11-27 15:02

я расследовал это недавно.

положить в стек приложения пам, или тест с sshd:

session    required       pam_launchd.so launchd_session_type=Aqua

это долгий путь к получению графического сеанса, который довольно близок к переключенному сеансу пользователя. В частности, он находится в правильном пространстве имен bootstrap и имеет правильные загрузочные порты (я думаю). Вы можете проверить источник pam_launchd; он пользуется какой-то разумной частная библиотека (vproc_priv.H функции в libvprop) для вызова процедур Mach для настройки портов и пространства имен. Он соответствует всем (ограниченным) документам, которые Apple предоставляет для системных вызовов на основе Mach.

Далее, вам нужно установить свой идентификатор пользователя аудита на пользователя с API BSM, или loginwindow не будет говорить с вами на Lion.

сеанс выглядит очень близко к переключенному сеансу теперь, если вы проверяете "launchctl blist", и некоторые процессы и службы оживают красиво (например, pasteboard и т. д на.) На самом деле, все, кроме Finder и loginwindow работает. Однако до тех пор, пока loginwindow не будет запущен, вы не сможете запустить графическое приложение, а процесс loginwindow для каждого сеанса всегда порождается как прямой потомок глобального. Как можно ткнуть процесс loginwindow, чтобы запустить новый loginwindow на свежем сессии? Я не могу найти способ поставить последнюю деталь на место!

любая помощь в заполнении этого ответа с благодарностью.

1
отвечен Nicholas Wilson 2022-11-27 17:19

запуск команды с sudo позволяет установить скрипт нечитаемым для обычных пользователей. Это не идеально, но если ваш пользователь администратора уже скомпрометирован, игра в любом случае закончена!

chmod u-r scriptname

мой скрипт выглядит так, он работает удаленно, когда один пользователь уже запущен, для переключения на второго пользователя через SSH (тестировался на 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
отвечен zeigerpuppy 2022-11-27 19:36

Я должен был войти тот же пользователь в 25 различных рабочих станций, для того, чтобы сделать обновление программного обеспечения. Я не смог запустить ' osascript-e ...'команда надежно от сеансов SSH, даже с привилегиями sudo. Однако я смог запустить его через Apple Remote Desktop. Если у вас есть ARD:

  1. выберите ваши машины
  2. разбудить их и выйти из других пользователей, если это необходимо
  3. выберите " отправить команду UNIX..."из меню "Управление"
  4. вставить Сценарий Арьяна (опуская слово "sudo") в диалоговом окне команды
  5. выберите и введите "Run command as: User: root"

Я был рад найти все 25 Mac Minis работает Finder в качестве пользователя, менее чем за минуту. Просто повторюсь, с ARD вам не нужно вводить пароль sudo на каждой машине. Строки, которые необходимо вставить в диалоговое окно команды (заменяя допустимые имя пользователя и пароль):

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'
0
отвечен William H. Hooper 2022-11-27 21:53

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

command-line
login-screen
macos
session
ssh
Вверх