Apex Terminal

留在你设备上的东西

这一页是摘要。具有效力的文本是应用内的《隐私权政策》,在“设置”里,和《使用条款》《用户须知》放在一起——那几份才是生效的文件,并且是随你正在用的这个版本一起发布的。同一份《隐私权政策》在本页末尾原文完整转载。

简短版本

Apex Terminal 不收集任何关于你的资料。没有账号要注册,没有我们运营的后台,也不采集任何使用数据。这不是一句关于意图的承诺,而是一件关于这个构建的事实,并且可以自己去核。

Apex Terminal 自己没有服务器。你的数据只去你让它去的地方。

应用里没有的东西

没有统计,没有埋点,没有崩溃收集,没有广告标识符,也没有任何这类第三方 SDK。没有注册流程。没有内购,没有订阅。

这些都是“不存在”,而“不存在”没法用测试来证明——它可以用一次任何人几秒钟就能重做一遍的搜索来证明,而这比一句承诺更值得信。这个应用完整的依赖清单是:swift-nio、swift-nio-ssl、swift-crypto、swift-sodium,以及一个内置的 swift-nio-ssh 分支。没有别的。追踪器没有地方可以藏。

应用内附带的隐私清单里,采集的数据类型为空,跟踪为否——这也是 App Store 隐私标签上写着“未收集数据”的原因。

存了什么,存在哪儿

私钥在 iOS 钥匙串里,并被标记为不可转移到别的设备;或者在 Secure Enclave 里,私钥从不在芯片之外存在。两者都不会被应用显示出来,也不会被传输。服务器看到的是签名,不是密钥。

连接、已知主机密钥、受信任的 CA 和命令片段在应用自己的存储里,设备锁定时加密。

密码——服务器的和远程屏幕的——在钥匙串里,设备解锁时可读。

终端回滚历史只在内存里,从不写入磁盘。会话结束或应用退出,它就没了。

命令历史默认不记录,要你自己去开。关掉它,已存的文件当场删除。

你对服务器提问的回答——一次性验证码、令牌、密码过期提示——只在回答服务器的那一刻留在内存里,之后哪儿都不存。

什么会离开这台设备

流量去往你连接的那些服务器:SSH 流量,在你的设备和你的服务器之间端到端加密。你的用户名、你的密钥签名或密码、你敲的内容,以及回来的内容。你的服务器会保留它自己的登录记录——任何服务器都是这样。

端口转发在一个监听端和一个由你指定的目的地之间搬运字节,经过转发的内容不会被检查、记录或存储。

如果你启用了某个需要你自己配置服务提供方的可选功能,它只与你配置的那一方通信,除此之外没有别处;在你配置好之前,它什么也不做。每一种情形,应用内的《隐私权政策》都写清楚了——在开启任何东西之前,那份文件是该读的。

没有任何东西送到开发者这里。没有开发者服务器,没有分析服务,也没有可以送过去的追踪域名。

和任何 SSH 客户端一样,你所在网络的运营方能看到你的设备连了哪些主机名。连接的内容是加密的。

关于同步

这个版本把所有东西都存在你设置它的那台设备上。没有跨设备同步,应用在你会去找它的地方也是这么写的。要把一套设置带到另一台设备,导出一个用口令封装的备份,在那边恢复。

Face ID 与 Touch ID

完全由 iOS 处理。应用永远看不到你的面容或指纹数据,它只知道系统的校验有没有通过。以这种方式保护的密钥,一旦设备上录入了新的面容或手指就会失效——所以知道你设备密码的人,没法把自己加进去然后用你的密钥。

如果这里写错了

如果这一页写的和应用实际做的对不上,那是应用错了,我们希望知道。见支持页面。

联系方式

对这份政策,或者对应用存了什么有疑问,请发到 [email protected]。中文、英文都可以,用你顺手的那种。


《隐私权政策》全文

以下是随应用一同发布的《隐私权政策》,在此原文完整转载,未作改动。

生效日期: 2026年9月9日

Apex Terminal 不收集任何关于您的信息。开发者不运营任何服务器,因此数据无处可去。本页面具体说明本应用存储什么、存储在哪里以及哪些内容会离开您的设备,因为“我们重视您的隐私”并不是任何人能够核实的说法。

简短版本

  • 您的密钥、密码和连接保留在您的设备上,存放于 Apple 的 Keychain 和本应用自身的受保护存储中。
  • 唯一的网络流量是发往您所连接的服务器,以及(对于经隧道连接的主机)代表您发往 Cloudflare。
  • 没有其他任何存放地点。本版本不提供 iCloud 同步,因此本设备就是唯一的副本。
  • Spotlight 默认关闭,需由您开启;接力只携带某个会话属于哪条连接,不携带其他内容。
  • 没有分析、没有崩溃报告器、没有遥测、没有广告、没有账户。

本应用在您设备上存储的内容

数据位置保护方式是否离开设备?
连接列表(名称、主机名、用户名、端口、跳板机、端口转发)应用存储设备锁定时加密否
SSH 私钥Keychain仅在设备解锁时可读;可选择额外以 Face ID 或 Touch ID 加锁从不发送到服务器;服务器看到的是签名而不是密钥
在 Secure Enclave 中生成的 SSH 密钥位于 Secure Enclave 内部;本应用只保存对它的引用私钥从不存在于芯片之外,任何软件(包括本应用)都无法读取;可设置为每次签名都需要 Face ID 或 Touch ID从不。即使通过备份也无法离开本设备
密钥的 OpenSSH 证书应用存储设备锁定时加密会出示给信任签发机构的服务器——证书本就是为此而存在
SSH 密码Keychain仅在设备解锁时可读发送到您正在登录的服务器。不同步
Cloudflare Access 令牌Keychain设备自重启后解锁过一次即可读取,以便设备在您口袋里时也能重新连接仅发回 Cloudflare,作为您自己连接的凭据。不同步
Cloudflare Access 服务令牌(仅当您为某个连接输入了它时)Keychain仅在设备解锁时可读仅发往 Cloudflare,作为该连接的凭据。不同步;随连接一起删除
已知 host key 与受信任的证书颁发机构应用存储锁定时加密;排除在设备备份之外否
片段应用存储锁定时加密;包含在设备备份中否
设置应用偏好设置标准应用存储否
最近打开的会话列表应用存储连接名称和时间,最多保留七天;锁定时加密;排除在备份之外否
终端回滚内容仅内存会话或本应用结束时即消失。从不写入磁盘否
命令历史除非您开启,否则不记录。 开启后:应用存储,锁定时加密,排除在备份之外,最近 500 条命令否。关闭的那一刻即删除
对服务器所提问题的回答(一次性验证码、令牌、过期密码提示)不存储仅在回答服务器的那一刻保存在内存中仅发往该服务器。从不存储、从不记入日志、从不再次提供
VNC 密码Keychain仅在设备解锁时可读发往您正在打开的那个屏幕
助手的 API 密钥(仅当您配置了提供方时)Keychain仅在设备解锁时可读作为请求凭据发往您所选择的提供方

每个 Keychain 项目都标记为仅限本设备。它无法通过 iCloud Keychain 传输,也无法从备份恢复到另一台设备上。唯一能把内容转移到另一台设备的方式,是您自己导出的备份文件;包含私钥的备份会用您输入的密码加密,而该密码不会被存储在任何地方。

Face ID 和 Touch ID 完全由 iOS 处理。本应用从不看到您的面容或指纹数据;它只会得知系统的检查是否通过。以这种方式保护的密钥,在设备上注册了新的面容或手指后将变得不可用,因此得知您密码的人无法把自己加进去并读取该密钥。

哪些内容会离开您的设备

只存在三种网络流量,而这三种都由您选择。

1. 发往您所连接的服务器。 SSH 流量,在您的设备与服务器之间端到端加密:您的用户名、您密钥的签名或您的密码、您输入的内容,以及服务器返回的内容。当连接经由 Cloudflare Tunnel 传输时,Cloudflare 转发加密的 SSH 字节但无法读取它们;host key 验证保护您免受隧道本身的威胁。服务器会像任何服务器一样保留自己的登录记录。

2. 发往 Cloudflare,针对您标记为经隧道连接的主机。 本应用询问主机由哪个 Access 应用程序保护,获取 Cloudflare 的签名密钥,在系统浏览器中打开登录页面,收集由此产生的令牌,并在打开隧道时向 Cloudflare 出示该令牌。登录本身在浏览器中进行,由 Cloudflare 和您的身份提供方完成;本应用从不看到您在那里输入的密码。所有这些都发往 Cloudflare 自己的端点,与您使用 Cloudflare 自己的工具时相同。Cloudflare 对此记录什么,受 Cloudflare 的隐私政策和您与其之间的协议约束。

3. 发往您为助手配置的提供方,且仅在您向它提问时。 见下文“助手”。在您填入提供方之前,并不存在这样的提供方。

另有两项功能承载的是他人的流量而非本应用自身的流量,本应用不读取其中任何内容:

  • 端口转发 在监听端与您指定的目标之间传递字节。经过转发的内容不会被检查、记录或存储。
  • 代理转发 在您为某条连接开启后,允许该服务器上的程序请求本设备用这条连接所使用的密钥对挑战值进行签名。发送出去的是签名,不是密钥,并且只在该会话打开期间有效。

没有任何内容发送给开发者。没有开发者服务器、没有分析 SDK、没有崩溃报告器,也没有跟踪域名。本应用在 App Store 的隐私标签写着“未收集数据”,因为事实如此。

与任何 SSH 客户端一样,您所在网络的运营者可以看到您的设备连接到哪些主机名。连接的内容是加密的。

iCloud 同步

本版本没有 iCloud 同步。 设置中仍会显示该开关,处于停用状态,并在旁边说明原因——想找同步的人应当被告知它的现状,而不是茫然猜测。本应用持有的任何内容都不会上传到 iCloud:连接列表、密钥、host key、片段、设置,一概没有。

这意味着本设备就是唯一的副本。要迁移到新设备,请在设置 → 备份中导出备份并在新设备上恢复;包含私钥的备份会用您输入的密码加密,而该密码不会被存储在任何地方,因此密码遗失即等于备份遗失。

如果未来版本提供同步,它在您开启之前都是关闭的,并且本政策会在它承载任何内容之前,先准确说明它承载什么。

“文件”App 中的文件

被您以“在‘文件’App 中显示”标记过的连接,会通过 File Provider 扩展发布到“文件”App 中,于是其他 App 可以打开该服务器上的文稿。该扩展独立于本应用运行,并以相同方式进行身份验证——从同一个 Keychain 访问组读取相同的凭据;它不持有任何第二份副本,也无法访问您未标记过的服务器。文件内容在服务器与请求它的 App 之间传递;除 iOS 自身为“文件”App 管理的缓存之外,不保留任何内容。

连接复用

当您在一台已连接的服务器上再打开一样东西时,若各项条件完全一致,本应用会复用已经打开的那条连接:相同的主机与端口、相同的用户、相同的密钥或密码、相同的跳板机、相同的隧道以及相同的代理转发设置。这意味着一次身份验证而不是多次。它绝不会把两个不同的身份合并:上述任何一项发生变化,就会建立一条独立的连接,因为以另一个身份验证过的连接并不是同一条连接。复用不会产生任何新的存储内容。

Spotlight 与接力

系统可能把内容带出本应用的两条途径。之所以在此说明,是因为“没有任何内容离开设备”必须名副其实。

Spotlight 默认关闭,需由您开启。 开启后,本应用会把每条已保存连接的名称与地址——也就是连接列表上显示的那两行——交给本设备的搜索索引,使其可以从主屏幕搜索到。除此之外不索引任何内容:没有密码、没有密钥、没有 host key、没有命令历史。索引位于设备本地,但无需打开本应用即可读取,这正是该开关存在的原因,也是它默认关闭的原因。关闭它会移除已索引的内容。

接力只携带“是哪条连接”,不携带别的。 当某个会话显示在屏幕上时,本应用会发布一条活动,说明它是哪条已保存的连接,以便您的另一台设备提议在那边继续。SSH 会话无法搬移——连接及其密钥都在本设备上——因此“继续”意味着向同一台服务器打开一个新会话。该活动只包含一个标识符和一个名称;它绝不包含主机名、用户名、密码或密钥。iOS 会把它通告给登录了同一 Apple 账户的设备,这是 Apple 的机制,详见 Apple 的隐私政策。

来自应用之外的链接

链接——ssh:// 或 apexterminal://——可以请求本应用打开某条连接或运行某条命令。任何链接都不自带权限:若链接指向本设备未保存的服务器,或者链接携带了任何命令,都会先向您展示,明确列出服务器与要运行的命令,在您允许之前不会发生任何事。链接绝不能向您的列表中添加连接;它只能把字段填好,保存与否由您决定。

命令历史

默认关闭。如果您开启,本应用会记录您输入的最近 500 条命令,仅在本设备上,设备锁定时加密,并排除在备份之外。它不会过滤机密信息:在命令行上输入的密码会被原样记录,正如您 shell 自身的历史记录会记录的那样。本应用不试图过滤这些内容,因为一个大多数时候有效的过滤器会获得超出其应得的信任。关闭历史记录会删除该文件。之后再次开启则从零开始。

诊断

设置中可以导出诊断报告,以协助解答支持问题。它不包含任何命令、终端输出、密码、密钥或令牌,也不包含完整的主机名。在写入每一行日志的那一刻,主机名就被替换为简短的单向摘要,只保留名称的最后两段(bastion.corp.example.com 会变成 <host:…>.example.com;IP 地址会变成 <ip>),令牌则被替换为其长度和摘要,因此导出的内容是所记录内容的副本,而不是可能有遗漏的事后清理。报告只在屏幕上显示,除非您选择分享,否则不会保存在任何地方。是否分享、与谁分享由您决定;本应用不会把它发送到任何地方。如果您把它发送给开发者,它只会在解答您的问题所需的时间内保留。

开发者会收到什么

从本应用不会收到任何内容。Apple 可能会向开发者显示汇总的 App Store 统计数据,以及(如果您在设备的“分析”设置中选择了“与应用开发者共享”)iOS 收集的崩溃日志。那是 Apple 的机制,在 Apple 的隐私政策中有说明;本应用不对其添加任何内容,也不包含自己的崩溃报告器。

助手

助手回答有关命令和终端输出的问题。在支持 Apple 智能的设备上,它在设备本地运行,任何内容都不会离开设备。如果您在「设置」中配置了服务提供方,每次请求只会向该提供方发送助手界面事先展示给您的内容:您的问题、服务器平台、最后一条命令,以及您选择包含的终端文本。您的 API 密钥保存在设备钥匙串中,并在请求头中发送给提供方。提供方如何处理请求,受其自身隐私政策约束。本应用绝不会自行向任何地方发送终端文本。

屏幕共享

屏幕共享(VNC)会显示远程电脑的屏幕,并把您的触控、按键和指针操作发送给它。画面只在显示时存在,不会被保存或发送到别处。VNC 协议本身不加密,其密码验证也很弱;除非您在连接设置中关闭该选项,否则画面会经由 SSH 连接传输并受其加密保护。远程电脑复制的文本会先提示您,经您确认后才会放入剪贴板。VNC 密码保存在本设备的钥匙串中,不会同步。

程序写入剪贴板

服务器上的程序可以请求本应用把内容放到您的剪贴板上——这正是 tmux 与 vim 用来让 yank 抵达您这一端的转义序列。在您于 设置 → 安全 中开启之前,该请求会被拒绝;而反方向——程序读取您的剪贴板——无论该设置如何都会被拒绝:作出回应就等于把您最后复制的内容交给对端正在运行的任何程序。

程序绘制的图片

服务器上的程序可以在终端里绘制图片——sixel、Kitty 图形协议,或 iTerm2 的内联图片。图片在本设备上解码并绘制,仅在会话保有它期间存在,绝不会写入文件,也不会发送到任何地方。其中两种协议还定义了以文件方式传递图片的途径:文件路径、临时文件或共享内存。这些指的是运行该程序那台机器的文件系统;本应用不会因服务器的指示而读写您设备上的文件,因此会拒绝这些请求并明确说明。iTerm2 的 File= 若没有 inline=1 同理——那是请求把服务器选定的文件保存到您的设备上。

应用锁

开启应用锁后,应用在打开时以及离开超过您选择的时间后返回时,会要求输入应用自己的密码——如果您允许,也可以使用面容 ID 或触控 ID。密码本身不会被保存:设备钥匙串中只保存加盐的 PBKDF2 派生值,且仅在本设备上。面容 ID 与触控 ID 完全由 iOS 处理,应用只知道验证是否通过。输错只会被延迟,绝不会删除任何数据。

您对数据的权利

本应用持有的一切都在本设备上,由您掌控。开发者处没有副本,因此开发者没有任何内容可以应您的请求提供、更正或删除。要查看您的数据,请打开本应用。要删除数据,请见下文。由于开发者不会收到任何内容,因此没有需要提出的请求,也没有可以提出请求的地址;行使这些权利的操作就在本应用的“设置”中。

删除全部内容

设置 → 删除所有数据会关闭每一个打开的会话,并从本设备移除每一个连接、SSH 密钥、已保存密码、Cloudflare Access 登录、片段、命令历史条目、最近打开的会话列表以及每一个已知 host key。保存在 Secure Enclave 中的密钥会随之销毁。单个 host key 也可以在设置 → 已知主机中移除。

删除本应用会从设备中移除其文件。iOS 不承诺在删除应用时移除该应用的 Keychain 项目,因此,如果您希望密钥、密码和令牌也一并清除,请先运行“删除所有数据”。

这两项操作都不会改变您服务器上或 Cloudflare 处的任何内容。要在那里撤销访问权限,请从服务器的 authorized_keys 中移除公钥,或在您的 Cloudflare Zero Trust 控制面板中吊销会话。

App Store 隐私标签

收集的数据:无。跟踪:无。本应用的隐私清单声明了它使用的两个需要说明理由的 API(用于其自身容器的文件时间戳,以及用于设置的标准偏好设置),未声明任何收集的数据类型,也未声明任何跟踪域名。

儿童

本应用是用于管理服务器的工具,并在 App Store 上据此分级。它不收集任何人、任何年龄段的数据。

变更

本政策的新版本随本应用的新版本一同发布,并在顶部标注日期。如果本应用将来开始向新的地方发送数据,会在此处以明白的文字事先说明,而不是事后说明。