设为首页 收藏本站
查看: 712|回复: 0

[经验分享] OS X: 用脚本定时登录Mac电脑

[复制链接]

尚未签到

发表于 2016-5-16 11:01:37 | 显示全部楼层 |阅读模式



远程登录:
  大家知道有时为了管理/测试方便,比如测试AD用户登录配置是否正确,需要登录到众多电脑上,使用下面的代码可以通过ARD等方式,使远程电脑自动登录到指定的用户username。
  

osascript <<EOT
tell application "System Events" to keystroke "$username"
tell application "System Events" to delay 2
tell application "System Events" to keystroke tab
tell application "System Events" to delay 2
tell application "System Events" to keystroke "$password"
tell application "System Events" to delay 2
tell application "System Events" to keystroke return
EOT

  
  


定时登录需求:

如果需求是无人职守地定时让系统自动登录,以便进行特定的管理操作,那么上面的代码无法执行。而为什么ARD可以成功呢?因为,在你从ARD发送Unix命令的时候,选择了用户root,也就是说使用root的用户环境来执行该命令。  因为普通的Unix命令无法访问GUI程序的安全环境/名字空间,除非在执行该GUI程序的相同用户环境里。如果需要使用脚本的方式在无用户登录的时候,访问LoginWindow,就需要使用特殊的命令。
  


重写脚本:
  launchctl bsexec <PID> <command and args>命令就是通过该进程的PID,使用其它的用户环境执行后面的命令。
  于是可以将上面的命令改写如下:
  

#!/bin/sh
USERNAME="username"
PASSWORD="passsword"
logger "AutoLogin Start…."
sleep 3
PID=`ps -ax | grep loginwindow.app | grep -v grep | tail -n 1 | awk '{print $1}'`
launchctl bsexec $PID osascript -e "tell application \"System Events\" to keystroke \"\""
launchctl bsexec $PID osascript -e "tell application \"System Events\" to keystroke \"$USERNAME\""
sleep 2
launchctl bsexec $PID osascript -e "tell application \"System Events\" to keystroke return"
sleep 2
launchctl bsexec $PID osascript -e "tell application \"System Events\" to keystroke \"$PASSWORD\""
sleep 2
launchctl bsexec $PID osascript -e "tell application \"System Events\" to keystroke return"
logger "AutoLogin End…."
exit 0


这样就可以在无人登录的时候访问LoginWindow,并对它输入字符串。  
  


定时机制:
  定时运行机制,还是使用Launch daemon来完成的好。
  问题的关键就是使用Launch服务提供的定时执行的参数,StartCalendarInterval,定义好自己使用的时间。
  下面是一个例子:
  

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>StartCalendarInterval</key>
<dict>
<key>Minute</key>
<integer>54</integer>
<key>Hour</key>
<integer>9</integer>
</dict>
<key>UserName</key>
<string>root</string>
<key>Label</key>
<string>edu.ts.AutoLogin</string>
<key>ProgramArguments</key>
<array>
<string>/Library/Adminscripts/AutoLogin.sh</string>
</array>
<key>LaunchOnlyOnce</key>
<false/>
<key>RunAtLoad</key>
<false/>
<key>ServiceDescription</key>
<string>Auto Login Test</string>
</dict>
</plist>


  

实际环境:
  实际环境中,可能遇到很多问题,使得上面的脚本无法正常运行。下面时比较常见的两个:
  


  • 屏幕保护程序: 如果在执行上面的脚本时,屏幕保护程序在运行,那么它会吃掉部分字符。
  • 登录窗口:登录窗口需要是显示用户名和密码,不是用户列表。(Display login window as Name and password);其次,当前光标应该在Username处,否则也是不工作。
  
  所以,处理好这些"意外"是保证脚本顺利成功的条件。最简单的方法就是设置好后重新启动电脑。
  


安全问题:
  因为该脚本中使用明码,所以可能导致安全隐患。
  


其它方法:
  另外一个可能的方法是,在一台机器上设置好自动登录后,得到/etc/kcpassword文件,里面的密码是加密的,然后设置com.apple.loginwidnow中的autoLoginUser,这样可以让系统在重新启动后自动登录,把所有这些打成pkg包,使用一个方式定时发布到客户端。
  

  在此感谢Mike Lynn的帮助
  

  Tony Liu

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-217721-1-1.html 上篇帖子: Mac OS X Lion技巧全集(不断更新) 下篇帖子: How to install Lua 5 in Mac OS X Leopard
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表