请求编写通过AppleScript+Terminal SSH更新Pi-hole的脚本
AppleScript 实现树莓派远程更新脚本
以下是满足需求的完整脚本,记得替换脚本中的树莓派IP和密码:
-- 替换为你的树莓派IP和登录密码 set raspberryPiIP to "192.xxx.xxx.xxx" set piPassword to "xxxxxx" tell application "Terminal" activate -- 启动SSH连接到树莓派 do script "ssh pi@" & raspberryPiIP in front window delay 2 -- 等待SSH密码提示框出现 -- 输入SSH登录密码 tell application "System Events" to keystroke piPassword & return delay 1 -- 等待登录流程完成 -- 切换到管理员权限 do script "sudo -i" in front window delay 1 -- 等待sudo密码提示 -- 输入sudo密码(与pi用户密码一致) tell application "System Events" to keystroke piPassword & return delay 2 -- 等待切换到root用户环境 -- 执行系统更新命令,追加标记以便确认执行完成 do script "apt update && apt upgrade -y && apt autoremove -y; echo 'UPDATE_FINISHED'" in front window -- 循环等待更新完成,检查输出标记 repeat until (do script "grep -q 'UPDATE_FINISHED' <<< \"$(history 1 | awk '{print $2}')\"" in front window) is "0" delay 5 end repeat -- 执行Pi-hole更新,同样追加标记 do script "pihole updatePihole; echo 'PIHOLE_UPDATE_FINISHED'" in front window repeat until (do script "grep -q 'PIHOLE_UPDATE_FINISHED' <<< \"$(history 1 | awk '{print $2}')\"" in front window) is "0" delay 5 end repeat -- 退出root权限和SSH会话,关闭Terminal do script "exit && exit" in front window delay 1 quit end tell
关键说明
- 权限要求:运行脚本前,需给Terminal和Script Editor(或你用来运行脚本的应用)开启「辅助功能」权限(系统设置→隐私与安全性→辅助功能),否则无法模拟键盘输入密码
- 等待逻辑:脚本通过在命令末尾追加自定义标记(如
UPDATE_FINISHED),循环检查命令执行状态,替代固定延迟,确保前序命令执行完毕再进行下一步 - 安全建议:脚本中明文存储密码存在风险,推荐配置SSH密钥登录:在本地执行
ssh-keygen生成密钥对,然后将公钥复制到树莓派的~/.ssh/authorized_keys文件中,这样可以去掉脚本中的密码输入步骤
内容的提问来源于stack exchange,提问作者Traenger
相关产品推荐
相关产品推荐

