从 SSH 诱导 Mac 图形登录

Sop*_*ert 20 ssh session command-line login-screen macos

如何从 SSH 诱导 Mac 图形登录?loginwindow在 Mac OS X 上以管理员身份通过 SSH 远程登录时,是否可以通过运行命令来使进程启动用户会话?

当机器处于登录窗口时(当前没有用户登录),我希望它打开一个用户会话,就像我点击了用户名并输入了密码一样。

不涉及编写 GUI 脚本的解决方案是非常受欢迎的,但这个 Apple KB 页面可能对那些走这条路的人感兴趣。

Arj*_*jan 5

不知道密码会使事情变得复杂,但也许解决方案是:是否可以暂时清空用户的密码?(然后将其重置为之前的状态。)

作为开始:

首先,获取要显示的登录窗口。只需注销当前用户,使用快速用户切换,或使用 SSH:

cd "/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/"
须藤 ./CGSession -暂停

或者,立即切换到特定用户,这可能会显示登录窗口(这突然不再适用于我的 10.5 Leopard):

须藤 ./CGSession -switchToUserID 501

现在显示的内容有点取决于系统偏好设置,但让我们假设它是用户的图标和他们的名字。要激活一个名字,我们必须输入第一个字母。然后,在 Return 之后,显示密码提示。或者,您可以选择任何名称(例如按向下箭头),然后按 Option-Return 以提示输入任何用户名及其密码。我不知道如何判断显示的是哪个屏幕,但让我们将其保存以备后用...

因此,要选择第一个(随机)用户名并按 Option-Return,键入特定的用户名,按 Return,然后键入密码:

sudo osascript -e '告诉应用程序“系统事件”
  密钥代码 125
  击键返回使用选项向下
  按键“用户名”
  延迟 1.0
  击键返回
  延迟 1.0
  按键“密码”
  延迟 1.0
  击键返回
结束告诉'

以上显示了一些错误,据我所知不会限制使用:

osascript[285]:3891612:(connectAndCheck)不受信任的应用程序不是 
    允许在登录前连接或启动 Window Server。
_RegisterApplication(), FAILED TO 建立默认连接到
    WindowServer,_CGSDefaultConnection() 为 NULL。

或者,使用“通过 Apple 远程桌面编写登录窗口脚本”中的特定语言脚本(也许有一天该站点的评论会显示更好的解决方案):

告诉进程“SecurityAgent”
  将窗口 1 的组 1 的文本字段 1 的值设置为“用户名”
  将窗口 1 的组 1 的文本字段 2 的值设置为“密码”
结束告诉
单击应用程序“SecurityAgent”窗口 1 的“登录”按钮

但主要问题是:这仍然需要密码。但是:当用户的密码为空时,显然不需要密码。事实上,对于空白密码,只需单击用户的图标即可。因此,如果使用 AppleScript 发送击键是可以接受的,那么也许“所有”都需要弄清楚:

  • 是否可以暂时清空用户的密码,以允许在不知道密码的情况下启动(或恢复)会话......?

  • 可以使 AppleScript 防错吗?喜欢:

    • 如何判断是否登录窗口是可见的?(也许stat -f%Su /dev/console可以提供帮助,因为root在显示登录窗口时会产生)
    • 如何判断显示的是哪个登录窗口?(比如:一个显示图标和登录名的,或者一个下拉列表,或者如果有人选择切换到某个特定用户,可能只是一个密码提示?)
    • 摆脱拖延症。
    • 那条错误信息呢?

(测试注意事项:当使用屏幕共享时,似乎设置首选项控制计算机时:加密密码和击键在显示登录窗口或用户成功登录后保留连接。使用加密所有网络时数据,那么每次显示登录或切换用户时,我的 Mac 都需要重新建立屏幕共享连接。)

  • 我想知道是否有人知道如何为其他人开始会话。所以,不考虑上面的答案,只是在 Mac OS X 的日常使用中:**管理员可以作为另一个用户登录,而不知道该用户的密码吗?**(就像命令提示符下的 `su`,但是用于 GUI 会话。或者就像当屏幕锁定时一样,输入管理用户名和密码*恢复*其他用户的会话。) (2认同)