【免费下载链接】TimeCapsuleSMBHacking the Apple AirPort Time Capsule to run modern Samba项目地址https://gitcode.com/gh_mirrors/ti/TimeCapsuleSMB点击查看免费下载Time Capsule 出厂默认不开启 SSH没有账号、没有 Web 管理入口很多人以为只能把它当一台砖头路由器。开源项目 TimeCapsuleSMB让 Apple AirPort Time Capsule 运行现代 Samba 的工具给出了答案固件里一直藏着 Apple 自己的 ACP 管理协议端口 5009只要用 AirPort 管理员密码就能在不开机盖、不接控制台的条件下远程开启 SSH并可靠地远程重启设备。本文解析它内置的纯 Python ACP 客户端是如何做到这一点的。为什么 Time Capsule 没有 SSH 也能被管理 Time Capsule 运行的是 NetBSD 固件它的设备管理入口其实一直存在——就是 AirPort 助理AirPort Utility背后那套ACPAirPort Control Protocol设备上的ACPd守护进程在TCP 5009端口监听协议魔数为acpp认证方式简单直接AirPort 管理员密码就是 ACP 密码设备状态和开关都以属性4 字节名称的形式读写例如syUT运行时长、waMA无线网卡 MAC、dbug调试开关、acRB重启请求。TimeCapsuleSMB 的作者在 src/timecapsulesmb/integrations/acp.py 中实现了一个仅依赖 Python 标准库的 ACP 客户端覆盖握手、校验和adler32、属性读写、加密头生成等完整协议流程。正因为不需要额外依赖configure才能在没有安装任何东西的裸机上直接用它开 SSH。几个关键常量一眼看懂常量值含义ACP_PORT5009ACPd 监听端口DBUG_SSH_VALUE0x3000写入dbug即在下一次启动时开启 SSHDEVICE_ACP_PATH/usr/bin/acp设备端随固件自带的 ACP 命令行工具COMMAND_SETPROP/COMMAND_GETPROP0x15 / 0x14设置/读取属性指令开启 SSH 的完整流程一次 ACP 调用 一次受控重启 SSH 的开启逻辑集中在 src/timecapsulesmb/services/acp_ssh.py 的enable_ssh_with_port_preflight中流程比想象中更谨慎端口预检preflight对 5009 端口做最多 3 次、共 4 秒窗口的 TCP 探测。连不上时先判断设备是不是换了 IP并给出你当前所在网段的信息避免对着错误地址反复尝试身份确认通过 ACP 读出设备 MACwaMA如果这个 IP 上回答的是另一台 AirPort比如它占用了你的目标地址会主动放弃操作并沿 MAC 追踪到真正的位置——绝不修改错误的设备写入开关set_dbug(host, password, 0x3000)即设置 ACP 属性dbug 0x3000。注意此时 SSH 还没开它要在下一次启动时生效ACP 重启调用 src/timecapsulesmb/services/reboot.py 中的reboot_device通过设置acRB 0属性让 ACPd 保存配置并执行shutdown——和 AirPort 助理的重启走的是同一条路等待并验证轮询直到设备的syUT运行时长小于重启前读到的值证明是新内核启动再等 22 端口打开最后回报 SSH is configured。 整个流程不需要任何设备端配合不上传脚本、不开后门用的完全是 Apple 固件自带的正规通道。远程重启不只看断线还要证明真的重启了 发了重启命令、设备没反应是老旧网络设备管理最常见的坑。TimeCapsuleSMB 的重启实现services/reboot.py为此设计了几重验证重启前读取基线一次性读出syUT运行秒数和waMAMAC作为新启动的判据新启动判定syUT明显小于请求时刻 已等待时间才能断定设备真的重启过而不是网络抖动防地址漂移重启后设备可能拿到新的 DHCP 地址代码会按 AirPort MAC 在全网重新定位设备locate_airport并把新地址回写给调用方防 ACPd 卡死Apple ACPd 存在一个已知缺陷——接受了acRB请求、拆掉自己的服务却永远没执行shutdown详见 DETAIL.md 中 Apple ACPd can hang during its own restart 一节。工具会在设备失联 90 秒后通过 SSH 检查内核 tick 计数和shutdown进程连续两次确认 ACPd 沉默才报acpd_broken并提示未做任何修改避免把卡死的设备误判为重启失败后继续操作。实际怎么用命令行与配置流程 ✅CLI 入口在 src/timecapsulesmb/cli/set_ssh.py常用形态# 只查询ACP 5009 和 SSH 22 是否可达 tcapsule set-ssh --status # SSH 关闭时走 ACP 开 SSH 自动重启 等待 22 端口 tcapsule set-ssh --enable # SSH 已开时通过 SSH 执行 acp remove dbug 关闭并重启验证保持关闭 tcapsule set-ssh --disable # 发送请求后立即返回不等待重启验证 tcapsule set-ssh --enable --no-wait更常见的是根本不用手动执行首次运行tcapsule configure时工具会自动探测 22 端口发现关闭就走上面的 ACP 开 SSH 流程重启、等 SSH 回来、再继续写配置和探测设备密码错误时会重新询问而不是写出坏的配置文件参见 DETAIL.md 的configure与set-ssh章节以及 FAQ.md 中关于密码用法的说明。macOS 图形客户端的 SSH 开关功能Workflows/SSHAccessStore.swift底层走的也是同一套服务。关闭 SSH 有个细节值得注意关闭走的是 SSH 内部执行设备自带的/usr/bin/acp remove dbug并且必须再重启一次来验证SSH 在新启动后依然保持关闭——因为只看到端口关闭可能是误判而运行时长重置才是重启的铁证。适合了解这套机制的读者 如果你正打算复活一台吃灰的 Time Capsule记住核心事实没有 SSH ≠ 没有管理面5009 端口的 ACP 才是 Time Capsule 的管理总线TimeCapsuleSMB 的价值在于把 ACP 协议、身份确认、重启验证、故障判据都打包成了开箱即用的流程你只需提供 AirPort 管理员密码想深入协议细节可以看 integrations/acp.py想理解等待与验证策略看 services/reboot.py命令行参数全表在 DETAIL.md 的set-ssh小节。SSH 打开之后部署 Samba、刷写启动钩子、跑 doctor 诊断等所有后续操作就都顺理成章了。赞分享【免费下载链接】TimeCapsuleSMBHacking the Apple AirPort Time Capsule to run modern Samba项目地址https://gitcode.com/gh_mirrors/ti/TimeCapsuleSMB点击查看免费下载相关推荐一文读懂LLaMA-Mesh-Q4_K_M-GGUF从模型转换到硬件加速全攻略一文读懂LLaMA Mesh Q4_K_M GGUF从模型转换到硬件加速全攻略 LLaMA Mesh Q4_K_M GGUF是一款基于Zhengyi/LLaM深度Q网络DQN与双深度Q网络DDQN对比gh_mirrors/de/deep-q-learning实践深度Q网络DQN与双深度Q网络DDQN对比gh_mirrors/de/deep q learning实践 深度强化学习是人工智能领域的热门方向而深度StPageFlip专业级Web翻页动画引擎的技术架构与性能优化StPageFlip专业级Web翻页动画引擎的技术架构与性能优化 StPageFlip是一个基于TypeScript开发的高性能Web翻页动画库专为构建企业前端UI组件创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考