You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求编写通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 07:45:01