只要跑着标准 sshd,SharkTTY 就能为它打开一个 shell —— VPS、NAS、Raspberry Pi、工作站都一样。纯 SSH 在对端不需要装任何东西。Mosh 和 ET 各自需要一个小的服务端程序,两者都是可选的。
打开「设置」,进入「主机」标签页,点右上角的 +。一台新主机有四项必须填,另外几项一开始可以先不管。
密码有两种方式。「保存密码」把它存进本机的 iOS Keychain;开启同步后,它会经由 iCloud Keychain 端到端地跟着你走,绝不经过我们的服务器。「连接时输入」什么都不存,每次连接都问你一遍。如果服务器会自己发出提示 —— 一次性验证码、硬件令牌 —— 那就改选「键盘交互 / 2FA」:你在连接时逐条作答,什么也不会被保存。
保存主机,然后点它连接。在主机列表里,单击是选中,双击直接连接。
已经有配置文件了
「设置」→「主机」→「从 SSH 配置导入」既接受粘贴进来的 ~/.ssh/config,也可以让你选一个文件。它只导入主机别名、地址、用户名和端口 —— 密码和私钥一概不导。使用 ProxyCommand 的条目会被跳过;带 ProxyJump 的条目先按直连导入,之后你可以手动为它指定跳板机。
密钥放在「设置」的「账户」标签页里。点 +,从三条路里挑一条:「生成密钥」「粘贴文本添加」或「从文件导入」。
私钥留在 iOS Keychain 里。为某个密钥打开「使用 iCloud 同步」,它就会经由 iCloud Keychain 传到你的其他设备 —— 这与 Apple 同步密码走的是同一条端到端通道,不是我们的服务器。如果你登录了 SharkTTY 云账号,主机、脚本、驱动器映射和模板会同步,而密码、私钥和口令明确不会。
回到主机编辑器,「认证」→「方式」→「密钥」就能为这台主机挑选密钥。如果列表是空的,编辑器会直说,并让你先去「账户」标签页。
第一次连到一台服务器时,SharkTTY 会取回它的主机密钥,显示 SHA256 指纹,并给出「信任并连接」。请把它和服务器管理员公布的指纹对照,或者和在服务器上执行 ssh-keygen -lf 打印出来的结果对照。你一旦接受,它就被记录下来。
如果这个密钥后来变了,连接会停下并给出警告,而不是继续。老实的解读是:服务器重装过或轮换了密钥,或者有人正坐在你和它中间。只有在你清楚是哪一种时,才使用「信任新密钥并重连」。
如果要主动重新固定一台服务器 —— 比如你自己刚重建过它 —— 打开这台主机,用「清除已记录的主机密钥」。下一次连接会请你从头确认新的指纹。
三者都能给你一个交互式 shell。区别在于服务器端需要准备什么,以及网络在你脚下变动时会发生什么。
| 传输方式 | 服务器端需要 | 网络切换后是否存续 | 值得知道的 |
|---|---|---|---|
| SSH(直接) | 除 sshd 外无需任何东西 | 否 | 任何你已经能 ssh 上去的主机都适用。 |
| Mosh(加速) | mosh-server | 是,走 UDP | 在 Wi-Fi 与蜂窝网络之间漫游;延迟飙升时在本地回显你的输入。 |
| ET(实验性) | etserver,默认端口 2022 | 是,走 TCP | 适合彻底封禁 UDP 的网络。默认关闭,需要先在「设置」里打开。 |
Mosh 会预测你输入的内容,让屏幕在服务器回应之前就有反应。「设置」→「终端」→「默认预测模式」提供「自适应」—— 只在链路慢时才开启预测 —— 以及「总是」和「从不」。默认是自适应,对绝大多数人都合适。
ET 仍在测试中,要在「设置」里启用「ET (Eternal Terminal) 传输」之后才会出现。打开后,它会作为第三种连接方式出现在主机编辑器里。有一点需要提前想到:和 Mosh 的 UDP 一样,ET 的数据连接是从设备直接连到 etserver 端口的,不会经过跳板机转发。
应用离开屏幕后不久,iOS 就会把它挂起,所以没有哪个移动终端能把一条 TCP 连接一直开着。SharkTTY 分两层来应对。
在任何传输方式下,最靠得住的办法都是在服务器上用一个多路复用器。挂一个像 tmux new -A -s mobile 这样的连接脚本,每次重连都会重新接入同一个会话,而不是开一个新 shell。脚本在下一节。
还有一件小事能省下大量等待:在「设置」里打开「终端响铃系统通知」。当某个终端响铃、而那个会话又不是你正在看的那个时,iOS 会推送一条通知。在长时间运行的命令后面接上 printf '\a',跑完时手机就会告诉你。
SharkTTY 里的脚本,就是一段在连接建立之后立刻在终端里执行的 shell 文本。「设置」→「脚本」,点 +,然后要么从空白脚本开始,要么选「从模板新建…」。
模板选择器是按人们真正会重连去做的那些事分组的:
给主机设好「平台」,选择器就会自动收窄到适合那台机器的模板,不会在 Alpine 机器上给你 apt。模板生成的内容都可以再改,用「存为模板」把你自己的版本留到下次。
在主机编辑器里给主机挂上脚本,每次连接都会执行它。也可以让主机保持干净,连接时再选:主机列表里,「以脚本连接」和「直接连接」是两个独立的操作,双击某个脚本就用它连接。
系统键盘上方是一条键盘辅助栏,放着终端需要而 iOS 没有的键:Esc、Ctrl、Tab 和方向键,另外还有上传文件、显示或收起键盘、以及打开指点设备的按钮。
「设置」→「键盘」→「输入板」可以在系统键盘和「透明」—— SharkTTY 自带的屏幕键盘 —— 之间切换。这块悬浮键盘是一整块键盘,而不是一条:符号、Tab、回车、⌃⌥⌘ 修饰键、fn 键和 F 功能键,像真键盘那样排布,回车是跨两行的 L 形。你可以把它拖到任何位置、调整大小,并用设置浮层里的透明度滑块让它在终端上淡下去 —— 也可以一路调到完全不透明,如果你根本不想透过它看东西。
同一处设置里的「排列」涵盖美式英语、英式英语、日语 JIS、法语 AZERTY、德语 QWERTZ 和西班牙语。按键上方有一条候选栏,会随着你的输入给出可能的词和常用命令。顶栏的麦克风按钮有两种用法:轻点切换到语音板,长按则是按住说话,直接把结果送进候选栏。
「鼠标上报」决定触控板归谁。打开时,外接触控板或鼠标的点击和拖动会送给能理解它们的程序 —— vim、tmux、htop、less。关闭时,指针改为选择文本。只有在程序确实开启了鼠标支持时,这个开关才有区别。在 iPad 上,外接键盘和触控板全程可用。
按住麦克风说话。识别在设备本地进行:免费、离线、即时,什么都不往外送。听到的内容会作为可编辑文本落在语音板里,「注入」把它敲进终端。
录音按片段保存,所以你可以裁掉一段、只对那一段「重新识别」,而不必把整句重说一遍。「历史记录」保留过往录音,可以试听,也可以再识别一次。在 iPad 上,语音板像透明键盘一样悬浮,也能缩放。
AI 是可选的,也和识别相互独立。在「设置」里用你自己的密钥添加一个提供商 —— 支持 OpenAI、Claude、Gemini、Kimi 和 GLM 的 API 格式 —— 设好对话模型,如果这家提供商有转写模型,也一并设上。Claude 只做对话、没有音频 API,所以在它那里录音会回落到本地识别。提供商密钥留在本机 Keychain,绝不同步。
接上提供商之后,提示词模式会把你说的话改写成整洁的文本,或者一条可以直接跑的命令;「附带终端上下文」则让模型在回答前看到屏幕上的内容。对话面板把一段对话放在会话旁边,让你不用离开就能问。
如果你不想自备密钥,登录 SharkTTY 账号后就能使用官方云端模型。它们用点数支付,点数通过应用内购买获得,并在你的各台设备之间共享。无论走哪条路,本地识别始终免费。
把文件送上服务器有两条路,适合的场合不一样。
「设置」里的「文件」标签页把设备能访问到的存储映射成驱动器:iCloud Drive、共享文件夹、应用本地文件夹,或者按 URL 添加的 WebDAV 服务器。映射之后,驱动器就能在同一个文件管理器里浏览 —— 一份文件从 NAS 走到服务器,中间不需要一台笔记本。
连接以标签页的形式打开,可以重命名。「平铺所有连接」把它们一起显示;「左右拆屏」和「上下拆屏」把两个并排放;「聚焦此连接」再把其中一个放回全尺寸。在 iPad 上,这是「盯着一次部署」和「一边跑部署一边看日志」之间的差别。
远程桌面和终端住在同一个工作区里,所以一个 Mac 会话和三个 shell 可以共享同一张网格。
在主机编辑器里设置「跳板机 (ProxyJump)」,就会先连到堡垒机,再经由它到达真正的主机。跳板机用它自己保存的密钥或密码做非交互式认证;要求键盘交互登录的堡垒机目前还不支持。
只有 SSH 连接会经过跳板机。Mosh 的 UDP 和 ET 的数据连接都是从设备直连目标 —— 在你打算从网络外部依赖它们之前,这一点值得先确认。
SharkTTY 的另一半,是一套完整的 Mac 远程桌面。它需要在 Mac 上装一个免费的伴侣应用 —— SharkTTY Desk —— 完全不需要端口转发、VPN,也不用碰路由器的任何设置。
SharkTTY Desk 是免费的,运行在 macOS 14 Sonoma 或更高版本的 Apple 芯片 Mac(M1 或更新)上。从 Mac 应用页面下载磁盘映像,把 SharkTTY Desk 拖进「应用程序」并打开它。它没有 Dock 图标,而是驻留在菜单栏,窗口从那里打开。
首次运行需要两项权限,应用面板会直接链到「系统设置」→「隐私与安全性」中对应的位置:
开始之前先核对版本。SharkTTY Desk 0.9.0 需要 iPhone 或 iPad 上的 SharkTTY 1.6 或更高版本,双向音频需要 1.7 或更高。如果你暂时无法更新应用,较早的 SharkTTY Desk 0.5.0 版本仍然能配 1.6 之前的应用使用。
在 iPhone 或 iPad 的 SharkTTY 里点 +,选「添加远程桌面」。有三种填法:
给这台桌面起一个你认得出的名字,然后「保存并连接」。如果这台 Mac 设置了放人进来之前先询问,应用会一直等到 Mac 前的人点「允许」。
别人也可以用链接把一台 Mac 分享给你。登录之后,分享过来的桌面会出现在「分享给我的」里。一个分享可以是只读的,可以设置过期,可以随时撤销,可以限制同时连接的人数,也可以限定只允许特定账号使用。
一台接了多台显示器的 Mac 会把它们全部送过来。「拼合排列」决定布局 —— 左右、上下、四分屏或画中画 —— 你还可以重新排序,让它们和桌上的摆法对得上。每块屏幕按需流传,正是这一点让一台三显示器的 Mac 在手机上仍然好用。
点某块屏幕就接管它;切换显示器时,输入和指针会一起指向新的那块。想看细节时,用「聚焦」把单块屏幕放大。在调整模式下,可以拖动画面重新摆位,双指捏合缩放。
直接触控是最快的上手方式:一根手指滑动指针而不点击,第二根手指落下就是在当前位置点击。双指轻点是右键。
需要精细操作时,还有一个带左、中、右三个键的虚拟鼠标:按住可以锁定拖拽,另有一个滚轮手势用于滚动。这些按键可以停靠成屏幕底部的一整块面板,向左或向右滑到你手所在的位置;屏幕键盘打开时,它还会抬到键盘上方。
放大镜以原生分辨率显示指尖底下那一小块区域 —— 从手机上点中偏好设置窗口里的一个复选框,靠的就是它。按键停靠之后,放大镜会正好待在光标上方,而不会往屏幕边缘飘。⌘、⌥ 和 ⌃ 是一次性修饰键:先点一下,再点它要作用的那个键。
一个带模式下拉的键盘按钮,用来在 SharkTTY 的悬浮键盘和「系统键盘 + 工具栏」之间切换。悬浮键盘带着 macOS 需要、而 iOS 不提供的修饰键和 F 功能键。
「快捷操作」菜单负责发送那些不方便敲的快捷键:聚焦搜索 Spotlight、调度中心、应用窗口和切换应用;窗口左半屏、窗口右半屏、窗口铺满、窗口居中、最小化窗口和隐藏应用;关闭窗口、退出应用和强制退出;区域截图和全屏截图;以及锁定屏幕。剪贴板双向同步,所以你可以在 Mac 上复制、在手机上粘贴。
视频是用 ScreenCaptureKit 采集、硬件编码的 H.264,档位由客户端来挑:xHD 呈现 Mac 的原生像素,HD 和标准用清晰度换带宽,流畅则把帧率放在一切之上。
把「弱网自动降级」保持打开,网络变差时会话会自己降下来,然后稳在那里,而不是一卡一卡。和 Mac 在同一个 Wi-Fi 下时,xHD 通常都没问题。
「远程声音」把 Mac 的系统声音送到设备上,所以 Mac 上放的视频或打进来的通话,你在手里就能听见。「麦克风输入」走的是相反方向,把 iPhone 或 iPad 变成 Mac 的麦克风 —— 你不在 Mac 跟前时,它上面的通话、录音和听写都靠这个。
两个方向都需要设备上的 SharkTTY 1.7 或更高版本。音频本身以 Opus 传输。
「虚拟屏幕」仍处于测试阶段,它会新建一块贴合 iPad 尺寸的无头屏幕。没有显示器的 Mac mini 靠它,随身多带一个工作区也靠它。
Desk 可以通过网络唤醒休眠的 Mac,并在你连着的时候让它保持唤醒。如果你允许,它还能显示 macOS 的登录窗口,让你在重启之后远程输入密码解锁这台机器。
两端都是主动向外拨号,所以路由器上从来不需要开端口。区别在于它们在哪条路径上会合。
会话端到端加密,中转始终只转发密文。在局域网内,多台 iPhone 和 iPad 可以同时查看并操控同一台 Mac;Mac 可以要求为每位新的查看者逐一批准,也能一键把任何人移除。
如果你不愿意碰别人的服务器,中转是开源的。在任意一台公网机器上运行 desk-relay:它在你传给 --bind 的地址上监听 QUIC,在 --wss-bind 上提供 WebSocket 回退,创建链接则由你自己选定的共享密钥保护。把 SharkTTY Desk 指向那个地址,扫描它随后给出的中转链接,流量经过的就只有你自己一方。整个过程不涉及 SharkTTY 账号。
要么服务器上没装 mosh,要么它不在非交互式 SSH 登录能拿到的 PATH 里。装上 mosh,或者在「设置」→「主机」里给这台主机填上 mosh-server 的绝对路径 —— 多数 Linux 机器上是 /usr/bin/mosh-server,Apple 芯片的 Mac 上是 /opt/homebrew/bin/mosh-server。
远端缺少 etterminal,或者它不在非交互式 SSH 会话的 PATH 里。在那台机器上装好 Eternal Terminal(apt install et、brew install et),确认 etserver 正在运行、它的端口 —— 你没改过的话就是 2022 —— 没有被防火墙挡住,然后重试。这期间 SSH 和 Mosh 照常可用。
这正是那道检查在起作用。正当的原因是服务器重建过或密钥轮换过;不正当的那一种,是中间有人。在点「信任新密钥并重连」之前先弄清楚是哪一种;如果是你自己重建的机器,就在主机编辑器里「清除已记录的主机密钥」,然后有意识地确认新指纹。
有两条限制。文件上限是 64 MB,而且主机需要一份应用能重复使用的凭据 —— 只用一次性验证码登录的服务器没法用来上传。更大或更麻烦的传输,请用 SFTP 文件管理器或映射的驱动器。
先确认 SharkTTY Desk 确实在这台 Mac 上运行着,而不只是装了。如果这台 Mac 可能在休眠,请在 Desk 里启用通过网络唤醒。跨网络时,应用会先尝试直连、再回退到中转,因此连上可能要花几秒钟。
画面全黑几乎总是意味着没有授予「屏幕录制」;画面不响应则说明没有授予「辅助功能」,或者「允许控制」是关着的。两者都在 Mac 的「系统设置」→「隐私与安全性」里,Desk 会直接链过去。
核对版本:SharkTTY Desk 0.9.0 需要手机或平板上的 SharkTTY 1.6 或更高版本。请从 App Store 更新,或者安装较早的 SharkTTY Desk 0.5.0 版本,它能配更早的应用使用。
你需要的都不花钱。应用、Mac 伴侣应用、本地语音识别以及上面所有功能都是免费的,连接自己的服务器也不需要账号。官方云端 AI 模型用点数支付;用你自己的提供商密钥则完全免费。打赏是可选的,可以一次性也可以按月,且不解锁任何功能 —— 按月打赏会持续续期,直到你在 Apple 账户设置里取消它。
SharkTTY 在 App Store 免费下载,Mac 版 SharkTTY Desk 同样免费。
关于 Mac 一侧的更多细节,见 SharkTTY Desk 页面 有问题的话,最快能得到回答的地方是 反馈板.