SSH、SFTP 与远程工具
保存 SSH 服务器,用密码、密钥或一次性验证码连接,核对每台服务器的主机密钥,通过 SFTP 浏览其文件并转发端口,这一切都在终端里完成。本页只讲 SSH 部分,本地 shell 有单独的页面。凡是有按钮但功能尚未完成的地方(远程桌面、部分 SFTP 功能),本页都会说明并给出原因。
它是什么,以及如何打开
终端以全屏浮层的形式打开,包含一个起始页、一个本地 shell 界面和 SSH 界面。本页的一切都发生在 SSH 界面上,那里的每个标签页就是一个远程会话。关闭浮层或返回起始页并不会关闭你的会话。
- 1点按底部栏中的 工具,再点按 终端。你也可以在命令面板中运行 打开终端,或点按主页上的 SSH 主机 卡片(保存过主机后才会出现)。
- 2在起始页点按 快速连接 输入
user@host,或点按 浏览主机 打开已保存的服务器。两者都会进入 SSH 界面。已打开的会话会以胶囊按钮的形式显示在卡片上方,方便你直接回到会话中。 - 3在 SSH 界面中,每个标签页就是一个远程会话。标签栏中的 + 会打开 主机,没有任何会话打开时,主机 会自动出现。
- 4工具:在平板上(宽度约 660 dp 或更宽,且未开启分屏),右侧面板会以一排图标的形式显示 32 个 SSH 工具。在手机上,点按标签栏中的扳手图标(更多选项),即可在菜单中打开同样的工具。

界面一览
| 界面 | 如何进入 | 你可以做什么 |
|---|---|---|
| 终端起始页 | 工具 → 终端、命令面板(打开终端),或主页上的 SSH 主机 卡片 | 本地 Shell、快速连接、浏览主机,以及用于恢复已打开会话的胶囊按钮。 |
| SSH 界面 | 起始页上的 快速连接 或 浏览主机 | 带有远程会话的标签页、显示 断开连接 或 重新连接 的状态栏,以及工具面板或菜单。 |
| 主机 | 浏览主机、标签栏中的 +,或 主机 工具 | 搜索、按分组筛选、全部连接、收藏、添加主机、编辑、删除,以及分组管理器。 |
| 新建主机 / 编辑主机 | 主机 中的 添加主机 或 编辑 | 地址、身份验证、身份、分组和标签、代理、跳板机。 |
| 快速连接 | 起始页、快速连接 工具,或 主机 中的 快速 | 用密码连接到 user@host:port,该主机会被保存。 |
| 验证主机密钥 / 主机密钥已更改! | 自动出现,在连接到未知服务器或密钥已更改的服务器时 | 核对指纹,然后选择 信任并连接 或 拒绝。 |
| 身份验证质询 | 自动出现,使用 键盘交互 验证方式时 | 回答一次性验证码等提示。 |
| SSH 密钥 和 生成密钥 | SSH 密钥 工具(菜单的 安全 分组) | 生成、导入、复制公钥、把公钥部署到服务器、删除。包括设备绑定密钥。 |
| SFTP 浏览器 | SFTP 浏览器 工具(连接 分组),需要已连接的会话 | 浏览服务器、新建文件夹、重命名、删除(也可以一次删除多个)。 |
| 双栏视图 | SFTP 浏览器中的 双栏视图 | 并排查看手机上的文件夹和服务器。拖动复制目前还不能用。 |
| 传输队列 | 传输队列 工具(连接 分组) | 列出排队中的传输。目前还没有任何功能会往里添加任务。 |
| 端口转发 | 端口转发 工具(连接 分组),需要已连接的会话 | 为当前所在的会话添加本地转发和远程转发。 |
| VNC / RDP | VNC / RDP 工具(连接 分组) | 保存 VNC 和 RDP 连接并连接。远程屏幕目前还不会绘制出来。 |
| 串口 / UART | 串口 / UART 工具(连接 分组) | 保存 USB 串口配置并连接;Android 会请求使用该 USB 设备的权限。 |
| 云服务商 | 云服务商 工具(安全 分组) | 在你的服务器上运行某个服务商的 CLI,或粘贴 JSON 形式的实例,将其保存为主机。 |
| 看门狗监控 | 自动化 分组中的 看门狗监控 项(Pro) | 每隔几秒在服务器上运行一条命令,输出发生变化时发出警告。 |
| Webhook | 自动化 分组中的 Webhook 项(Pro) | 创建一个链接,经你确认后,在某台主机上运行一条命令。 |
| 软件包 | 软件包 工具(Linux 工具 分组),仅限 SSH | 列出、更新、安装和移除主机上的 apt 软件包。 |
| 同步与团队 | 同步与团队 工具(设置 分组) | 在本地备份主机和代码片段,并在你的网络中创建或加入团队房间。 |
| 导入 / 导出 | 导入 / 导出 工具(设置 分组) | 把你的主机复制为 JSON,并通过粘贴导入 JSON、~/.ssh/config、known_hosts 或 CSV。 |
主机与连接
主机就是一台已保存的服务器:连接到哪里、你是谁,以及你如何证明身份。你的主机保存在设备上,按 PocketCode 账号区分。
主机
已保存服务器的列表,显示每台服务器的名称、hostname:port 以及上次连接时间。通过 浏览主机、标签栏中的 + 或 主机 工具打开。
你可以
- 用 搜索主机… 搜索:可匹配名称、主机名和标签。
- 用分组胶囊按钮筛选:全部,然后每个分组和子分组各有一个胶囊按钮(分组的胶囊按钮包含其子分组)。管理分组 会打开分组管理器。
- 选中某个分组后,全部连接 (N) 会连接该分组及其子分组中的每台主机。
- 加星标的主机列在 收藏 下,其余的列在 所有主机 下。
- 点按主机即可连接。每张卡片的菜单里有 连接、收藏、编辑 和 删除。
- 添加主机 打开表单;快速 打开 快速连接。
- 在分组管理器中,新建分组 需要填写 名称、父分组、主题(由主机继承) 和 自动录制会话:该分组及其子分组中的主机一连接就会开始会话日志(LOG 标记)。删除分组 会让其中的主机变为无分组。
你不能,以及原因
- 在免费版通过任何入口保存第二台主机:添加主机、快速连接、导入(JSON、SSH 配置、CSV)和云实例导入都会在 1 台已保存的主机处停下,并显示 Terminal Pro 提示页。上限是 1 台已保存的主机。Pro
- 给整个分组设置代理、默认身份或环境变量:分组上只能设置主题和 自动录制会话。尚未提供
新建主机 和 编辑主机
表单里有你的密码或密钥,因此它受到保护,无法截屏或录屏。填写好 主机名 和 用户名,且端口在 1 到 65535 之间时,保存 才会启用。
你可以
- 连接:可选的 标签、主机名、端口(默认 22)和 用户名。
- 身份验证 → 验证方式:密码、密钥对 或 键盘交互。密码以加密方式保存;编辑主机时该字段显示 (未更改)。
- 选择 密钥对 时,从 SSH 密钥 中选一个密钥(设备绑定的密钥有标记),或选择 手动粘贴 并粘贴私钥,如果有 密钥口令 也一并填写。设备绑定密钥不会显示口令字段。
- 选择 键盘交互 时,服务器会在连接过程中询问它需要的内容,例如一次性验证码:连接过程中将提示您输入。
- 使用身份 会用已保存身份中的用户名和凭据填写表单;保存为身份 会保存当前的这些内容。身份是复制到主机里的模板,不是实时链接:之后修改身份,不会改变已经使用过它的主机。
- 组织:选择一个 分组,并添加以逗号分隔的 标签。
- 高级:代理 / 跳板主机,可选 SOCKS5 或 HTTP 代理(主机和端口);跳板机,即用作堡垒机的另一台已保存主机,最多 3 跳,你有另一台已保存的主机后才会出现;以及 Agent 转发 开关。
- 选择一个 颜色,并给主机加星标作为收藏。
你不能,以及原因
- 给主机设置启动命令或已保存的端口转发:表单里没有对应字段,而且从表单保存主机会把这两项清空。尚未提供
- 单独使用 SSH Jump Host 胶囊按钮:它是为旧数据保留的,没有任何作用。真正起作用的跳转是 跳板机 列表。尚未提供
快速连接
用于尚未保存的服务器。输入地址,填上密码,然后连接。
你可以
- 在 连接字符串 中输入
user@host或user@host:port;IPv6 地址要放在方括号中,user@[::1]:22。预览会显示用户、主机和端口。 - 在 密码(可选) 中输入密码,然后点按 连接。文本中包含
@之前,按钮一直是关闭状态。 - 连接之前,如果套餐还有空位,主机会先保存到 主机 中。在免费版已有 1 台已保存主机时,它仍会连接,但新主机不会被保存,并会打开 Terminal Pro 提示页。
你不能,以及原因
- 用密钥或一次性验证码连接:快速连接创建的始终是 密码 主机,没有密码时标签页会显示
Error: No password stored for this host。密钥和 键盘交互 请使用 添加主机。尚未提供
验证主机密钥 和 主机密钥已更改!
第一次连接某台服务器时,以及它的密钥发生变化时,连接都会等待你做出决定。PocketCode 会记住你信任过的密钥(首次使用时信任)。
你可以
- 查看 主机、密钥类型 和 指纹(
SHA256:格式),并与你的服务器显示的指纹进行比对。 - 新服务器会显示 验证主机密钥:信任并连接 会保存密钥并继续;拒绝 则取消。
- 如果已保存的密钥与服务器的密钥不同,对话框标题会变成 主机密钥已更改!,显示 先前的指纹,并警告可能存在中间人攻击。只有确定服务器重装或重新配置过时,才可以继续。
- 如果 60 秒内没有回应,连接会被拒绝。
你不能,以及原因
- 查看或移除受信任服务器的列表:没有对应的界面。你可以通过导入
known_hosts文件来添加条目。尚未提供
身份验证质询
使用 键盘交互 验证方式、且服务器要求提供某些内容(例如一次性验证码)时出现。该对话框受到保护,无法截屏。
你可以
- 在对应的 响应 N 字段中回答每个提示(文字会按服务器要求隐藏或显示),然后点按 提交。取消 会放弃这次尝试。
- 你有 120 秒的时间作答。
你不能,以及原因
- 保存答案:每次连接都会重新询问。有意为之
SSH 密钥
SSH 密钥 是你可以用来登录的密钥对列表。从 SSH 密钥 工具(工具菜单的 安全 分组)打开。要在主机中使用某个密钥,请在主机表单中选择 密钥对。
SSH 密钥
每个密钥一张卡片:标签、类型和长度、指纹以及公钥。
你可以
- 通过 设备绑定 标记识别设备绑定的密钥。
- 用系统文件选择器从手机上 导入 私钥文件;文件名会成为标签。
- 生成密钥 创建新的密钥对(见下一节)。
- 复制公钥 把公钥放到剪贴板。
- 部署 会把公钥追加到当前会话所在服务器的
~/.ssh/authorized_keys中,目录权限为 700,文件权限为 600,目录不存在时会创建。会话打开时才会出现该按钮。命令执行后,标签页会输出[Key deployed to authorized_keys];PocketCode 不会检查命令的结果,所以请事后试一下这个密钥。 - 删除 会移除密钥;对于设备绑定的密钥,还会把它从 Android Keystore 中删除。
你不能,以及原因
- 复制或部署导入密钥的公钥:应用不会为导入的密钥保存公钥(卡片上显示
imported而不是指纹)。导入的密钥只能用于签名连接。尚未提供 - 导出设备绑定密钥的私钥:它永远不会离开 Android Keystore。有意为之
生成密钥
从密钥列表中的 生成密钥 打开。
你可以
- 填写 密钥标签,并选择 密钥类型 及其 位数:RSA(2048 或 4096,默认选中 4096)、ED25519(256)、ECDSA(256、384 或 521)、DSA(1024)或 DEVICE-BOUND。
- 可以为私钥添加可选的 口令(DEVICE-BOUND 不支持)。
- DEVICE-BOUND 会在 Android Keystore 内创建一个 ECDSA P-256 密钥。私钥无法导出、复制或同步,只有公钥会离开手机。签名前需要最近的生物识别/PIN验证 默认开启:此时密钥只会在你通过生物识别或设备 PIN 验证后的 30 秒内签名。连接时 PocketCode 自己不会显示验证提示。
你不能,以及原因
- 在另一部手机上使用设备绑定密钥,或从备份中恢复它。设备
SSH 会话及其工具
已连接的主机就是 SSH 界面上的一个标签页。未连接的远程标签页会显示状态栏,其中有 断开连接 或 重新连接。
标签页、重新连接与关闭
每个标签页对应一个连接。连接超时为 15 秒,并且每 30 秒检查一次连接。
你可以
- 长按标签页会打开 重命名、复制会话(针对来自已保存主机的标签页)和 关闭其他标签页(有多个标签页时)。
- 关闭仍处于连接状态的标签页时会询问 关闭活动会话?:关闭会断开连接,并停止它的端口转发。关闭其他标签页 总是会询问。
- 网络恢复后,PocketCode 会自动重新连接已断开的会话。开关在 设置 → 终端 → 终端自动重连,默认开启。标签页会输出
[Network connection lost],之后输出[Network restored — reconnecting…]。
你不能,以及原因
- 在免费版同时打开多个会话:再打开一个标签页、连接第二台主机、复制会话 和 多路复用 Shell 都会显示 Terminal Pro 提示页。上限是同一时间 1 个活动的 SSH 会话;终端界面上的本地 Shell 单独计数。Pro
- 不借助 Android 就让会话在后台持续运行:除非把 PocketCode 排除在电池优化之外,否则切换应用时 Android 可能会暂停或中断 SSH 会话和端口转发。应用会提示一次:让 SSH 会话在后台保持连接 → 打开设置。设备
多路复用 Shell 和 广播
两者都在工具菜单(扳手图标)的 会话 下,并且都需要已连接的会话。
你可以
- 多路复用 Shell 在同一个 SSH 连接上再打开一个 shell,放在名为
<host> (mux)的新标签页中。 - 广播 会把你输入的每条命令同时发送到所有已连接的标签页;已连接的本地 shell 标签页也会收到。开启期间会显示 BROADCAST 标记,点按 广播关闭 即可停止。
你不能,以及原因
- 在免费版使用 广播:会显示 Terminal Pro 提示页。Pro
- 在宽屏上从停靠面板访问 广播 和 多路复用 Shell:它们只在工具菜单中,而停靠布局会隐藏该菜单。把窗口缩窄到约 660 dp 以下,或者开启分屏(Pro),就能让菜单回来。有意为之
工具一览
SSH 界面共有 32 个工具。在工具菜单中它们分为七个分类;停靠面板则把它们排成一排。与本地 shell 共用的工具,请见 Linux 终端页面。
| 分类 | SSH 界面上的工具 |
|---|---|
| 连接 | 快速连接、主机、SFTP 浏览器、端口转发、分享你的开发服务器、串口 / UART、VNC / RDP、传输队列 |
| 会话 | 水平拆分 / 垂直拆分(Pro)、多路复用 Shell、广播、命令历史、别名管理器、后台任务、复制输出、清空终端、开始录制 |
| Linux 工具 | 文件管理器、进程、网络、软件包、磁盘使用、系统信息、环境变量、Git 面板 |
| 代码片段 | 所有片段 和八个分类快捷方式 |
| 自动化 | 键盘宏、快捷脚本、Expect 规则、看门狗监控、Webhook |
| 安全 | SSH 密钥、云服务商、配置文件 |
| 设置 | 会话日志、同步与团队、导入 / 导出、音量键导航:关 / 音量键导航:开 |

SFTP
SFTP 作用于当前所在的会话,因此需要一台已连接的主机。从工具栏或工具菜单的 连接 分组打开 SFTP 浏览器。目前在界面上唯一能用的上传方式是 附加文件,放在最后讲。
SFTP 浏览器
从服务器的根目录 / 开始。
你可以
- 浏览服务器:先显示文件夹,再显示文件,每一行都带有权限,文件还带有大小。点按文件夹即可打开,用返回箭头回到上一级。
- 新建文件夹,以及在每行的 更多选项 菜单中 重命名 或 删除。
- 长按某一行开始选择,再点按以添加更多项目,然后一起删除。系统会询问 删除已选择的 N 项?此操作无法撤销。 每个项目是单独删除的,所以某一项失败不会影响其余项目。
- 双栏视图 会切换到双面板布局。
你不能,以及原因
- 在这个视图中下载、上传或打开文件:点按文件没有任何反应,只有文件夹能打开。尚未提供
- 删除仍有文件的文件夹:文件夹是通过 SFTP 的
rmdir调用删除的,所以要先清空它。有意为之 - 查看操作失败的原因:错误不会显示。无法读取的文件夹看起来是空的(此目录为空),重命名或删除失败后列表保持原样。尚未提供
双栏视图
SFTP — 拖放 并排显示你的手机和服务器。标题下方的提示是 长按以拖动。
你可以
- 本地 面板从存放你的项目的文件夹开始;远程 面板从
/开始。点按文件夹即可打开,用面板顶部的箭头回到上一级。 - 用 单栏视图 返回。
你不能,以及原因
- 通过拖动在两个面板之间复制文件:该页面提供了这个操作,但放下操作还没有接入传输功能,所以不会复制任何内容。尚未提供
传输队列
带有进度条的传输列表,有 取消 和 清除已完成。为空时显示 没有进行中的传输。
你可以
- 查看排队中的传输(等待中、已完成、失败),取消其中一个,或用 清除已完成 清掉已结束的。
你不能,以及原因
- 向队列中添加传输:应用中目前没有任何功能会往里发送文件,所以它始终显示 没有进行中的传输。尚未提供
从手机上传文件
SSH 会话中输入栏的 附加文件 按钮。
你可以
- 点按 附加文件 并选择一个文件:它会通过 SFTP 上传到服务器的
/tmp/<file name>,路径会被输入到输入栏中,方便你接着输入下一条命令。
你不能,以及原因
- 选择目标位置或保留已有的文件:文件总是放到
/tmp,同名文件会被覆盖。有意为之

端口转发
端口转发让流量通过 SSH 连接传输。规则属于当前所在的会话。从工具栏或工具菜单的 连接 分组打开 端口转发;它需要已连接的会话。
端口转发
列出当前会话的规则(N 条规则)。
你可以
- 添加规则 会打开一个表单:类型(本地 (L)、远程 (R) 或 动态)、标签、本地端口、远程主机(预设为
localhost)、远程端口 和 自动启动。 - 本地 (L) 在你手机的某个端口上监听,并通过服务器把流量发送到 远程主机 的 远程端口(以服务器的视角解析)。例如,通过
localhost:5432访问服务器上的数据库。 - 远程 (R) 在服务器的 远程端口 上监听,并把流量发送到 远程主机 的 本地端口,从你的手机去访问(默认是
localhost)。例如,对外暴露运行在手机上的开发服务器。 - 每条规则会显示 活动 或 已停止;可以启动、停止或删除它。
- 关闭标签页或断开连接,会结束该会话的转发。
你不能,以及原因
- 在免费版同时使用超过 1 条规则(按当前所在的会话计算)。Pro
- 把 动态 当作 SOCKS 代理使用:这条规则的标签是 SOCKS 代理,并记录
SOCKS5 proxy on localhost:N,但应用实际是把该端口原样转发到同一端口号的localhost,并不是 SOCKS5 代理。尚未提供 - 在多次会话之间保留规则:规则不会随主机一起保存,所以下次连接时 自动启动 没有可启动的内容。尚未提供
远程桌面(VNC 和 RDP)
VNC / RDP 工具(连接 分组)会打开已保存的远程桌面连接列表。目前它可以连接,但无法显示远程屏幕。
VNC / RDP
该页面的标题是 远程桌面。其中一些按钮(Conectar、Guardar、Eliminar)无论应用使用什么语言,都是西班牙语。
你可以
- 新建连接:协议 VNC(端口 5900)或 RDP(3389)、标签、主机、端口、用户名(RDP)和密码、画质级别以及 仅查看。
- Conectar 会直接连接到该主机和端口(不经过 SSH),完成 VNC 握手(无需验证,或使用 VNC 密码),并在新标签页中输出
Connected:以及服务器的名称和屏幕尺寸,还会输出服务器发来的任何提示音或剪贴板文本。
你不能,以及原因
- 查看或控制远程屏幕:连接会读取屏幕更新然后丢弃,没有视图,也没有鼠标或键盘输入。尚未提供
- 使用 RDP:选择 RDP 运行的是同一套 VNC 代码,并没有 RDP 客户端。尚未提供
串口 / UART
串口 / UART 工具(连接 分组)用于 USB 串口适配器:Arduino 开发板、路由器、物联网设备。
串口 / UART
副标题:USB 串口连接(Arduino、路由器、IoT)。
你可以
- 查看 已检测到的设备,即 Android 报告的 USB 设备。
- 添加配置:设备(空 = 自动)、波特率(默认 115200)、数据位(8)、停止位(1)和一个名为 Paridad 的校验位菜单(Ninguna、Impar、Par、Mark、Space)。该菜单以及 Guardar 和 Cancelar 按钮无论应用使用什么语言,都是西班牙语。
- 已保存配置上的播放按钮用于连接:它会通过 Android 的 USB 主机 API 查找设备,打开它的串行数据接口并设置线路编码;成功后标签页会显示
Connected to …。 - 第一次连接时,Android 会弹出自己的对话框,询问是否允许使用该 USB 设备(标签页会输出
Requesting USB permission for <device>…)。允许后连接继续;PocketCode 最多等你 60 秒。
你不能,以及原因
- 在拒绝 USB 权限,或对话框 60 秒内没有回应之后仍然连接:标签页会输出
USB permission not granted for <device>,会话以错误结束。再次点按播放按钮即可重试。设备 - 使用没有暴露带批量端点的 CDC 或厂商自定义数据接口的适配器:标签页会输出
USB device does not have expected CDC serial endpoints。设备
云服务商
云服务商(安全 分组)显示六个胶囊按钮:Amazon AWS、Google Cloud、Microsoft Azure、DigitalOcean、Kubernetes 和 Docker。它不会调用任何云 API,也不会使用你在 Platform Services 下连接的账号。
云服务商
该页面的标题是 云服务。
你可以
- 点按某个胶囊按钮,即可在当前会话所在的服务器上运行该服务商的 CLI(
aws ec2 describe-instances、gcloud compute instances list、az vm list、doctl compute droplet list、kubectl get pods、docker ps)。服务器上必须已安装该 CLI。标签页会输出[Cloud discovery (AWS): N bytes received]。 - 导入实例(JSON):粘贴一个 JSON 数组,例如
[{"provider":"AWS","name":"…","publicIp":"…"}]。每个带有 IP 地址的实例都会保存为主机(用户root、端口 22,并标注其服务商标签),出现在 实例(N) 下,并带有 连接 按钮。在免费版,只有放得进 1 台主机上限的实例才会保存为主机,但所有实例仍会出现在 实例(N) 中;其余的会打开 Terminal Pro 提示页。
你不能,以及原因
- 自动导入实例:发现功能只会输出 CLI 返回了多少字节,不会把输出转换成实例。JSON 必须手动粘贴。尚未提供
- 不先添加凭据就连接导入的实例:导入的主机是没有保存密码的 密码 主机。请编辑主机,添加密码或选择密钥。尚未提供
看门狗与 webhook
这两个工具都在 自动化 分组中,并且都需要已连接的主机。创建任何一个都需要 Pro:在免费版会看到 Terminal Pro 提示页。
看门狗监控
按固定间隔在服务器上运行一条命令,并在输出与预期不符时警告你。
你可以
- 添加看门狗:标签、命令(预设为
systemctl is-active nginx)、期望输出(预设为active)和 间隔(秒)(预设为 60)。 - 用开关启动或停止监控,也可以删除它。第一次检查在一个间隔之后运行。
- 每次检查都会在你启动监控时所在的会话中运行该命令。如果输出不包含预期文本(忽略大小写),标签页会输出
⚠ Watchdog alert: <command> → <output>,并把该监控标记为失败。
你不能,以及原因
- 在免费版创建看门狗。Pro
- 收到系统通知:警报只是终端标签页中的一行文字,而且监控只在应用运行时才会工作。有意为之
- 把监控绑定到某一台主机:它会在你启动时所在的任意会话上运行。有意为之
Webhook
Webhook 是一个链接,它会请求 PocketCode 在一台已保存的主机上运行一条已保存的命令。其他应用可以打开它,例如启动器或自动化应用。
你可以
- 创建 webhook:名称、选择主机 和 命令。每个 webhook 都会显示它的链接
pocketcode://terminal/webhook/<id>?secret=<secret>(在屏幕上被遮盖,旁边有复制按钮),以及 活动 / 非活动 开关、N 次执行 和 删除。 - 当有东西打开这个链接时,PocketCode 会检查 id 和密钥。只有 webhook 处于开启状态且两者都匹配,才会询问 要执行此自动化吗?(有链接请求在 HOST 上执行规则「X」。)。运行 会连接到主机并发送命令;取消 则什么也不做。密钥错误则完全没有任何回应。
你不能,以及原因
- 在免费版创建 webhook。Pro
- 无人值守地运行 webhook:每次触发都会先征求你的确认。有意为之
- 从网页触发 webhook:只有
pocketcode://链接。应用不会在你的手机上打开监听端口来在你的服务器上运行命令。有意为之
软件包管理器
软件包(Linux 工具 分组)只出现在 SSH 界面上,因为本地 shell 没有软件包管理器。
软件包
副标题:System packages,无论应用使用什么语言,都是英文。每个操作都会输入到会话中,所以你可以在终端里看到它的输出。
你可以
- 列出主机上已安装的软件包(它会读取
pkg list-installed,失败时再读取dpkg -l,只保留已安装的),用 搜索软件包… 搜索,并刷新。 - 全部更新(
apt update && apt upgrade -y)、列出全部、清理(apt autoclean)和 安装(询问 输入软件包名称: 并运行apt install <name> -y)。 - 对某个软件包:查看其信息(
apt show)和移除(apt remove <name> -y)。
你不能,以及原因
- 使用其他软件包管理器(yum、dnf、apk……):命令固定为
apt。尚未提供 - 自动用
sudo运行命令:命令会以你的 SSH 用户身份原样运行,所以在该用户不是 root 的服务器上可能会因权限错误而失败。有意为之
同步与团队房间
同步与团队(设置 分组)分为两部分:同步 和 团队。两者都不需要 Pro。
同步
该页面的标题是 同步与团队。
你可以
- 同步 会生成一份备份,包含你的主机、代码片段和一些终端设置;要同步的数据 下的开关决定包含哪些内容。上次同步 显示它运行的时间。
- 你账户中的连接(与这份备份是不同的路径):在设置的 设置同步 对话框中打开 启用同步(云同步,Pro 功能)并勾选 连接(SSH/DB) 后,保存、编辑、加星标或删除主机会把它的信息发送到你的 PocketCode 账户:名称、地址、端口、用户名、认证类型、标签、收藏、分组、代理和代理转发设置。密码、密钥、密钥口令和启动命令仍留在手机上。通过 JSON、SSH 配置或 CSV 导入的主机不会被发送。同一个选项也会带上数据库模块的连接,但只带它自己更精简的信息(名称、主机、端口、引擎和分组),绝不包含用户名或密码。云同步关闭,或该选项未勾选时,不会发送任何内容。
- 端到端加密 → 启用加密 会要求设置一个 主密码,并用 AES-256-GCM 加密备份,密钥由该密码派生(PBKDF2,100,000 轮)。一旦丢失将无法恢复。
你不能,以及原因
- 在另一台设备上取回已同步的主机:应用会保存下载下来的列表,但没有任何功能会把它变成主机。尚未提供
- 把这份备份同步到另一台设备或云端:备份会写入应用内的一个文件(
terminal_sync_backup.json),不会上传任何内容;应用也没有办法从中恢复。尚未提供 - 包含 SSH 密钥:虽然有 SSH 密钥 开关,但备份中从不包含密钥。尚未提供
团队
团队房间让同一网络中的人凭验证码加入房间。
你可以
- 创建房间:为它起一个 房间名称,并分享它显示的 6 位数验证码。
- 加入房间:会在本地网络中发现附近的房间,或者你输入 6 位数验证码。房主会看到 新的加入请求(N 想要加入),并点按 接受 或 拒绝。
- 成员列表会显示每个人的角色:只读、读写 或 管理员。房主可以更改角色和移除成员;任何人都可以 离开房间,房主可以 关闭房间。
- 设备之间的流量是加密的(ECDH 密钥协商和 AES-GCM)。在 Android 13 及更高版本上,第一次创建房间、查找房间或加入房间时,Android 会请求附近设备(本地网络)权限;在你授予之前,这三项操作都会保持被阻止。
你不能,以及原因
- 在房间中共享主机或代码片段:提示语说要创建或加入房间才能实时共享,但目前只有成员和角色可以使用。尚未提供
- 在本地网络之外使用房间:发现和连接都仅限局域网。需要网络
- 在应用重启后保留房间:房间只在活动期间存在。有意为之
导入与导出
导入 / 导出(设置 分组)可以在设备之间迁移你的主机列表,或从其他工具导入。它使用你复制和粘贴的文本。
导出配置
点按 导出,然后点按 复制。
你可以
- JSON 中包含你的主机(名称、地址、端口、用户名、验证类型、标签、颜色、收藏和启动命令)、你的分组(名称、颜色、图标)以及你自己的代码片段,不含预置的片段。
你不能,以及原因
- 导出密码、密钥或设置:它们永远不会出现在 JSON 中。导回时会重新创建分组,但不会把主机放回分组里。尚未提供
- 用密码加密导出内容、保存为文件或显示为二维码:文本是明文,复制和粘贴是唯一的导入导出方式。尚未提供
导入配置
选择格式,粘贴 文本,然后点按 导入。结果显示为 已导入 N 个项目。在免费版,导入会停在套餐的上限处:1 台已保存的主机(JSON、SSH 配置和 CSV)和 10 条你自己的代码片段(JSON;98 条预置的不计入)。放不下的会被略过,已导入 N 个项目 只统计实际导入的部分,并会打开 Terminal Pro 提示页。known_hosts 条目没有上限。
你可以
- JSON:上面导出的内容。已保存的主机(主机名、端口和用户名都相同)会被跳过。
- SSH 配置:每个
Host块会变成一台主机;带通配符模式的块(例如Host *)会被跳过。带有IdentityFile的块会变成一台没有密钥的 密钥对 主机,ProxyJump在指向已存在的主机时会变成 跳板机。 - known_hosts:明文条目会变成受信任的服务器;哈希条目(OpenSSH 的默认格式)无法还原,会被跳过。
- CSV:需要有表头行。可识别的列:
label(或name)、hostname(或host、address)、port、username(或user)和group(或folder);只有 hostname 是必需的。分组按名称查找,找不到则新建。
你不能,以及原因
- 从文件或二维码导入:该页面只接受粘贴的文本。尚未提供
- 导入密码或密钥:没有任何格式携带它们,所以导入的主机需要在 编辑主机 中补充凭据。有意为之
免费版与 Pro
以下是应用在 SSH 方面做的套餐检查,来自套餐定义(UserPlan、PlanFeature)。未列出的功能没有套餐检查。
| 功能 | 免费版 | Pro |
|---|---|---|
| 已保存的主机(添加主机 表单、快速连接、导入和云实例导入) | 1 | 无限制 |
| SSH 界面同时活动的会话(SSH 标签页、VNC / RDP、多路复用 Shell、复制会话;串口占用终端界面的名额) | 1 | 无限制 |
| 端口转发规则(针对当前所在的会话) | 1 | 无限制 |
| 广播 | 不包含:显示 Terminal Pro 提示页 | 包含 |
| 看门狗监控(创建) | 不包含:显示 Terminal Pro 提示页 | 包含 |
| Webhook(创建) | 不包含:显示 Terminal Pro 提示页 | 包含 |
| SFTP 浏览器、SSH 密钥(包括设备绑定密钥)、主机密钥验证、云服务商、软件包、同步与团队 | 包含(无套餐检查) | 包含 |
隐私与安全
- 你的机密保存在哪里。 密码、私钥(生成的、导入的或粘贴的)和密钥口令保存在 Android 的加密偏好设置中:名称使用 AES-256-SIV,值使用 AES-256-GCM,主密钥由 Android Keystore 持有。它们按 PocketCode 账号分别保存,所以在同一部手机上登录另一个账号不会暴露它们。删除主机会同时删除它的密码、密钥和口令。
- 这一层加密没有覆盖的内容。 主机名、用户名、分组、标签以及受信任服务器的指纹保存在应用的私有存储中,没有这层额外的加密。
- 设备绑定密钥。 私钥在 Android Keystore 内生成,无法导出、复制或同步。只有公钥会离开手机,并且它不在任何导出或备份中。
- 禁止截屏的界面。 主机表单、身份对话框和身份验证质询都被标记为安全:它们打开期间,Android 会阻止截屏和录屏。
- 服务器。 连接直接从你的手机到你的服务器,中间没有 PocketCode 的服务器。未知服务器始终需要你来决定,如果无法读取指纹或你在 60 秒内没有回应,连接会被拒绝。SSH 由 JSch 库处理(版本 0.2.18)。
- 分析。 如果你开启了 使用情况分析,应用会记录一次连接尝试、它的验证类型和耗时。主机名、用户名、密码和密钥从不包含在内。
- 导出与同步备份。 导出的 JSON 和本地备份包含主机地址和用户名,除非你为备份设置了主密码,否则不加密;两者都不包含密码或密钥。
- 云同步中的连接。 只有在云同步已开启并勾选 连接(SSH/DB) 时,主机的名称、地址、端口、用户名、认证类型、标签、收藏、分组、代理和代理转发设置才会发送到你的 PocketCode 账户;密码、密钥、密钥口令和启动命令永远不会。同一个选项也会同步数据库模块的连接,但只包含名称、主机、端口、引擎和分组。
- Webhook。 Webhook 链接中包含它的密钥,所以请保密。打开它从不会在未经你确认的情况下运行任何内容。
- AI 聊天。 它的 SSH 工具只会对你已在标签页中连接的主机操作,并且默认会先征求同意。
- 没有自己的锁。 终端没有自己的 PIN 或生物识别锁,它依赖你手机的锁屏。设备绑定密钥可以要求生物识别或设备 PIN 才能签名。
- 明文 VNC。 VNC 通过明文 TCP 连接,不经过 SSH。请只在你信任的网络上使用。
限制
SSH 部分目前不能做什么,以及原因。标有 Pro 的是套餐限制,「尚未提供」表示功能尚未完成,「有意为之」是有意的设计选择,「设备」是手机或 Android 的限制。
- 打开 Telnet 连接:应用中包含一个 Telnet 客户端,但没有任何入口能打开它(快速连接和主机表单都不行)。尚未提供
- 查看或控制远程桌面(VNC、RDP):连接可以建立,但屏幕不会绘制,也没有输入。RDP 运行的是 VNC 代码。尚未提供
- 在 SFTP 视图中下载、上传或编辑远程文件、通过拖动在面板之间复制,或填充传输队列。只有 附加文件 可以上传,且上传到
/tmp。尚未提供 - 把 动态 转发当作 SOCKS5 代理使用,或在会话结束后保留端口转发规则。尚未提供
- 从表单为主机设置启动命令或已保存的端口转发,或为分组设置代理、身份或环境变量。尚未提供
- 用密钥或一次性验证码使用 快速连接:它创建的始终是 密码 主机。尚未提供
- 从导入的私钥中获取公钥,或列出和移除受信任的主机密钥。尚未提供
- 使用
apt以外的软件包管理器,或不粘贴 JSON 就导入云实例。尚未提供 - 把 同步与团队 的备份同步到云端或另一台设备、通过云同步在另一台设备上取回主机、在团队房间中共享主机或代码片段、加密导出内容,或从文件或二维码导入。尚未提供
- 在宽屏上从停靠面板访问 广播 和 多路复用 Shell:它们只在工具菜单中。有意为之
- 串联超过 3 个跳板机。有意为之
- 选择或查看密钥交换、加密或主机密钥算法:使用的是 SSH 库的默认值,没有任何设置。本页不对后量子密钥交换做任何声明。有意为之
- 在免费版同时使用超过 1 台已保存的主机、1 个会话或 1 条端口转发规则;在免费版使用 广播、看门狗监控 或 Webhook。Pro
- 不把 PocketCode 排除在电池优化之外,就让会话在后台保持连接。设备
- 在本地网络之外使用团队房间。需要网络
常见问题
Error: No password stored for this host
该主机使用 密码 验证,但没有保存密码。打开 主机 → 编辑,在 身份验证 下输入密码。没有填写密码就使用 快速连接 时,以及导入的主机(它们不带凭据)也会出现这个提示。
Error: No private key stored for this host
该主机使用 密钥对 验证,但没有密钥。在 编辑主机 中,于 密钥 下选择一个,或选择 手动粘贴 并粘贴密钥。从带有 IdentityFile 的 SSH 配置导入的主机就是这种情况。
Error: Authentication failed
服务器拒绝了凭据;标签页还会显示 [Connection failed: Authentication failed]。请检查用户名、密码或密钥以及口令。如果服务器要求一次性验证码,请把 验证方式 设为 键盘交互。使用要求生物识别或 PIN 的设备绑定密钥时,请先完成验证,然后立刻重新连接:超出 30 秒的窗口后,密钥不会签名,服务器会拒绝这次尝试。
Error: Connection timed out / Error: Connection refused
15 秒内没有任何响应,或者端口已关闭。请检查地址和端口(默认 22)、手机是否有网络,以及 SSH 服务是否在运行。如果该主机使用了 代理 / 跳板主机,也要检查它。
Error: Unknown host key — trust the host and retry
尚未信任该服务器的密钥。请重新连接,如果指纹一致,就在 验证主机密钥 中选择 信任并连接。
主机密钥已更改!
服务器的密钥与你信任过的不同:可能是它被重装或重新配置了,也可能有人正在拦截连接。请把 指纹 与 先前的指纹 进行比对,只有知道变化原因时才点按 信任并连接。
[Security] Could not verify host key fingerprint — connection refused.
PocketCode 无法读取服务器的指纹,宁可拒绝继续,也不信任未知的密钥。请再试一次连接。
[Network connection lost]
设备断开了网络,会话已结束。开启 终端自动重连(设置 → 终端)后,网络恢复时标签页会自动重新连接,并输出 [Network restored — reconnecting…]。否则,请点按状态栏中的 重新连接。
Jump host chain deeper than 3 hops
跳板机 链最多只能有 3 跳;请缩短它。还有两条相关的消息:链条绕回了自身(请修改其中一台主机的 跳板机),以及 Jump host no longer exists (…)(跳板机已被删除,请另选一台)。
Terminal Pro
你触及了免费版的限制:第二个会话、通过 添加主机、快速连接、导入或云实例导入保存第二台主机、第二条端口转发规则、广播、看门狗监控 或 Webhook。继续使用基础版 会关闭提示页;解锁 Terminal Pro 会打开套餐页面。
此目录为空(SFTP)
文件夹是空的,或者无法读取(例如因为权限):浏览器不会显示错误,所以无法读取的文件夹看起来就是空的。
[Error: file upload failed]
附加文件 无法把文件上传到服务器的 /tmp。请检查会话是否仍处于连接状态,以及 /tmp 是否可写。
主机或代码片段没有保存(快速连接、导入)
在免费版,套餐只保留 1 台已保存主机和 10 条你自己的代码片段(98 条预置的不计入)。快速连接 仍会打开会话,但不会保存主机;导入和云实例导入只会带入放得下的部分,已导入 N 个项目 也只统计这部分。每次有内容被略过,都会打开 Terminal Pro 提示页。删除一个来腾出位置,或解锁 Terminal Pro。
USB permission not granted for … / No USB serial device found. Available: …
前一条表示你拒绝了 Android 的 USB 权限对话框,或 60 秒内没有回应;再次点按播放按钮并允许即可。后一条表示没有匹配的已连接 USB 设备;消息中会列出 Android 看到的设备。
VNC server only offers unsupported security types (…); refusing to connect.
PocketCode 只支持无需验证或使用 VNC 密码的 VNC;要求 TLS 或其他类型的服务器会被拒绝。VNC authentication failed 表示密码被拒绝。即使连接成功,远程屏幕也不会绘制。
未找到软件包
当主机既没有 pkg 也没有 dpkg,或者会话未连接时,列表为空。软件包操作适用于基于 Debian 的主机,并以你的 SSH 用户身份运行,不带 sudo。
让 SSH 会话在后台保持连接
除非把 PocketCode 排除在电池优化之外,否则切换应用时 Android 可能会暂停或中断 SSH 会话和端口转发。打开设置 会带你到系统页面;暂不设置 则保持现状。
快速连接 中的 连接 按钮是关闭的
文本中包含 @ 之后它才会启用。请输入 user@host,例如 [email protected]。
无法导入密钥文件
文件是空的或无法读取。请选择私钥文件本身。