Індукуйте графічний вхід для Mac із SSH


16

Як викликати графічний вхід на Mac від SSH? Чи є спосіб змусити loginwindowпроцес запустити сеанс користувача шляхом запуску команди при віддаленому вході через SSH як адміністратор на Mac OS X?

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

Рішення, які не передбачають сценарії графічного інтерфейсу, є вкрай бажаними, але ця сторінка Apple KB може бути цікавою для тих, хто проходить цей шлях.

Відповіді:


4

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

Для початку:

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

cd "/ Система / Бібліотека / Основні сервіси / Додатки меню / Користувач.меню / Зміст / Ресурси /"
sudo ./CGSession -призначення

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

sudo ./CGSession -switchToUserID 501

Що тепер показано, трохи залежить від системних налаштувань, але припустимо, це значки користувачів та їх імена. Щоб активувати ім’я, нам потрібно було б набрати перші літери. Потім, після повернення, з'являється запит на пароль. Крім того, можна вибрати будь-яке ім’я (наприклад, натискаючи стрілку вниз), а потім натиснути опцію-повернення, щоб запропонувати як будь-яке ім'я користувача, так і його пароль. Я не знаю, як можна визначити, на якому екрані відображається, але давайте збережемо це для подальшого ...

Отже, щоб вибрати перше (випадкове) ім'я користувача та натиснути Option-Return, введіть певне ім’я користувача, натисніть Return і введіть пароль:

sudo osascript -e 'розповісти додаток "Системні події"
  код ключа 125
  повернення натискання клавіші, використовуючи опцію вниз
  натискання клавіші "ім'я користувача"
  затримка 1,0
  повернення натискання клавіші
  затримка 1,0
  натискання клавіші "пароль"
  затримка 1,0
  повернення натискання клавіші
кінець скажи '

Сказане показує деяку помилку, яка, наскільки я можу сказати, не обмежує використання:

osascript [285]: 3891612: (connectAndCheck) Довірених програм немає 
    дозволено підключитися до або запустити сервер Windows перед входом у систему.
_RegisterApplication (), НЕ вдалося встановити з'єднання за замовчуванням до
    WindowServer, _CGSDefaultConnection () - NULL.

Крім того, використовуйте мовний сценарій із " Сценарію вікна входу через Apple Remote Desktop " (можливо, одного дня коментарі на цьому веб-сайті покажуть краще рішення):

розповісти процес "SecurityAgent"
  встановити значення текстового поля 1 групи 1 вікна 1 на "ім'я користувача"
  встановити значення текстового поля 2 групи 1 вікна 1 на "пароль"
кінець розповісти
натисніть кнопку "Увійти" у вікні 1 процесу заявки "SecurityAgent"

Але головна проблема така: для цього ще потрібен пароль . Однак: очевидно, пароль не потрібен, коли у користувача є порожній пароль. Насправді, для порожніх паролів все, що потрібно, просто натискання піктограми користувача. Отже, якщо надсилання натискань клавіш за допомогою AppleScript є прийнятним, можливо, "все", що залишилося для з'ясування:

  • Чи можна тимчасово видалити пароль користувача, щоб дозволити розпочати (або відновити) сеанс, не знаючи цього пароля ...?

  • Чи можна зробити стійкі до помилок AppleScript? Подобається:

    • Як сказати, чи видно вікно входу? (можливо, stat -f%Su /dev/consoleможе допомогти, оскільки це даєroot під час відображення вікна входу)
    • Як сказати, яке вікно для входу відображається? .
    • Позбудьтеся від затримок.
    • А що з повідомленням про помилку?

(Примітка для тестування: при використанні спільного доступу до екрана здається, що встановлення переваги при керуванні комп’ютерами: шифрувати паролі та натискання клавіш також зберігає з'єднання лише тоді, коли відображається вікно входу або після успішного входу користувача. При використанні шифрувати всю мережу дані, то моєму Mac потрібно відновлювати з'єднання Screen Sharing щоразу, коли відображається логін або користувач перемикається.)


Це вдалий старт, але у нього є дві проблеми. По-перше, це не працює, якщо ви знаходитесь у вікні входу, чого я хотів, і він запитує пароль, чого б я вважав за краще цього. Оскільки він є root, він повинен мати можливість перемикати користувачів без пароля.
Софі Алперт

Ага. Я навіть не знаю, як увійти як інший користувач, коли сидить за самим комп’ютером, тому ніякої сигари для sudo osascript -e 'tell app "System Events" to keystroke "password" & return'. Якщо екран заблокований, введення імені користувача та пароля адміністратора відновлює сеанс іншого користувача. Але як розпочати сеанс для будь-якого користувача, не знаючи пароля? (Просто для впевненості, якщо ви знаєте пароль. Іншим способом вирішення може бути розділення екрана, яке також працює для екрана входу. Вам потрібно буде знову підключити розділ екрана після того, як певний користувальницький сеанс буде розпочато або відновлено.)
Арджан

Це добре. Я б вважав за краще рішення, не вручну моделюючи натискання клавіш.
Софі Альперт

2
Цікаво, чи хтось знає, як почати сеанс для когось іншого. Отже, не враховуючи вищезазначеної відповіді, щойно під час щоденного використання Mac OS X: чи може адміністратор увійти як інший користувач, не знаючи пароля цього користувача? (Точно так само як suна командному рядку, а потім для GUI сесії Або так само , як , коли екран заблокований, де введення адміністративне ім'я користувача і пароль. Відновлює сеанс іншого користувача.)
Арьяна

Можливо, це неможливо зробити без натискання клавіш AppleScript: docs.info.apple.com/article.html?path=RemoteDesktop/3.0/en/…
Sophie Alpert

1

Я нещодавно розслідував це.

Помістіть це в стек PAM програми або тестуйте за допомогою sshd:

session    required       pam_launchd.so launchd_session_type=Aqua

Це довгий шлях до отримання графічного сеансу, який досить близький до сеансу вимкненого користувача. Зокрема, він знаходиться у правій області імен завантажувального пристрою та має правильні порти завантаження (я думаю). Ви можете перевірити джерело того, що робить pam_launchd; для виклику процедур Mach для налаштування портів та простору імен використовується деяка розумна на вигляд приватна бібліотека (vproc_priv.h функції в libvprop). Він збігається з усіма (обмеженими) документами, які Apple надає для системних викликів Mach.

Далі вам потрібно встановити ідентифікатор користувача аудиту таким, який має користувач за допомогою API BSM, інакше вікно входу не буде спілкуватися з вами на Lion.

Сеанс виглядає дуже близьким до сеансу з вимкненим режимом, якщо ви встановите прапорець "blister startll blist", і деякі процеси та послуги прекрасно оживають (як, наприклад, картонна картка тощо). Насправді працює все, крім Finder і loginwindow. Поки вікно входу не запускається, ви не можете запустити графічний додаток, і процес сеансу входу за сеансом завжди породжується як пряме дочірнє глобальне. Як можна натиснути процес входу в систему, щоб запустити нове вікно входу в новий сеанс? Я не можу знайти спосіб встановити останній твір на місце!

Будь-яка допомога у виконанні цієї відповіді вдячно отримана.


0

запуск команди з sudo дозволяє встановити сценарій нечитабельним для стандартних користувачів. Це не ідеально, але якщо ваш користувач адміністратора вже поставлений під загрозу, гра закінчена!

chmod ур сценарій

мій сценарій виглядає приблизно так, він працює віддалено, коли один користувач вже працює, щоб перейти на другого користувача через 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

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

  1. виберіть свої машини
  2. розбудити їх та вийти з інших користувачів, якщо потрібно
  3. виберіть "Надіслати команду UNIX ..." у меню "Керування"
  4. вставити скрипт Аряна (пропускаючи слово "sudo") у діалогове вікно команд
  5. виберіть і введіть "Запустити команду як: Користувач: 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'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.