跳转到内容
首页
Docs/SSH、SFTP 与远程工具

SSH、SFTP 与远程工具

保存 SSH 服务器,用密码、密钥或一次性验证码连接,核对每台服务器的主机密钥,通过 SFTP 浏览其文件并转发端口,这一切都在终端里完成。本页只讲 SSH 部分,本地 shell 有单独的页面。凡是有按钮但功能尚未完成的地方(远程桌面、部分 SFTP 功能),本页都会说明并给出原因。

它是什么,以及如何打开

终端以全屏浮层的形式打开,包含一个起始页、一个本地 shell 界面和 SSH 界面。本页的一切都发生在 SSH 界面上,那里的每个标签页就是一个远程会话。关闭浮层或返回起始页并不会关闭你的会话。

  1. 1点按底部栏中的 工具,再点按 终端。你也可以在命令面板中运行 打开终端,或点按主页上的 SSH 主机 卡片(保存过主机后才会出现)。
  2. 2在起始页点按 快速连接 输入 user@host,或点按 浏览主机 打开已保存的服务器。两者都会进入 SSH 界面。已打开的会话会以胶囊按钮的形式显示在卡片上方,方便你直接回到会话中。
  3. 3在 SSH 界面中,每个标签页就是一个远程会话。标签栏中的 + 会打开 主机,没有任何会话打开时,主机 会自动出现。
  4. 4工具:在平板上(宽度约 660 dp 或更宽,且未开启分屏),右侧面板会以一排图标的形式显示 32 个 SSH 工具。在手机上,点按标签栏中的扳手图标(更多选项),即可在菜单中打开同样的工具。
The SSH screen on a tablet with no session open: 'Pick a host or open a tab to get started', and the docked tools panel showing Quick Connect with a Connection String field, an optional Password field and a Connect button
平板上的 SSH 界面:右侧的工具面板停在「快速连接」上
本地 shell、标签页、分屏、代码片段、录制以及其他 Linux 工具请见 Linux 终端。

界面一览

界面如何进入你可以做什么
终端起始页工具 → 终端、命令面板(打开终端),或主页上的 SSH 主机 卡片本地 Shell、快速连接、浏览主机,以及用于恢复已打开会话的胶囊按钮。
SSH 界面起始页上的 快速连接 或 浏览主机带有远程会话的标签页、显示 断开连接 或 重新连接 的状态栏,以及工具面板或菜单。
主机浏览主机、标签栏中的 +,或 主机 工具搜索、按分组筛选、全部连接、收藏、添加主机、编辑、删除,以及分组管理器。
新建主机 / 编辑主机主机 中的 添加主机 或 编辑地址、身份验证、身份、分组和标签、代理、跳板机。
快速连接起始页、快速连接 工具,或 主机 中的 快速用密码连接到 user@host:port,该主机会被保存。
验证主机密钥 / 主机密钥已更改!自动出现,在连接到未知服务器或密钥已更改的服务器时核对指纹,然后选择 信任并连接 或 拒绝。
身份验证质询自动出现,使用 键盘交互 验证方式时回答一次性验证码等提示。
SSH 密钥 和 生成密钥SSH 密钥 工具(菜单的 安全 分组)生成、导入、复制公钥、把公钥部署到服务器、删除。包括设备绑定密钥。
SFTP 浏览器SFTP 浏览器 工具(连接 分组),需要已连接的会话浏览服务器、新建文件夹、重命名、删除(也可以一次删除多个)。
双栏视图SFTP 浏览器中的 双栏视图并排查看手机上的文件夹和服务器。拖动复制目前还不能用。
传输队列传输队列 工具(连接 分组)列出排队中的传输。目前还没有任何功能会往里添加任务。
端口转发端口转发 工具(连接 分组),需要已连接的会话为当前所在的会话添加本地转发和远程转发。
VNC / RDPVNC / 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 密钥、云服务商、配置文件
设置会话日志、同步与团队、导入 / 导出、音量键导航:关 / 音量键导航:开
Terminal output of an SSH session on a remote Linux server: uptime, df -h and uname run at the pi@nanamitv prompt
一个远程会话:命令在服务器上执行,输出以文本形式返回
AI 聊天有四个 SSH 工具:列出你保存的主机、运行命令、上传和下载。它们只能用于你已在标签页中连接的主机,并且默认会在操作前征求你的同意。

SFTP

SFTP 作用于当前所在的会话,因此需要一台已连接的主机。从工具栏或工具菜单的 连接 分组打开 SFTP 浏览器。目前在界面上唯一能用的上传方式是 附加文件,放在最后讲。

SFTP 浏览器

从服务器的根目录 / 开始。

你可以

  • 浏览服务器:先显示文件夹,再显示文件,每一行都带有权限,文件还带有大小。点按文件夹即可打开,用返回箭头回到上一级。
  • 新建文件夹,以及在每行的 更多选项 菜单中 重命名 或 删除。
  • 长按某一行开始选择,再点按以添加更多项目,然后一起删除。系统会询问 删除已选择的 N 项?此操作无法撤销。 每个项目是单独删除的,所以某一项失败不会影响其余项目。
  • 双栏视图 会切换到双面板布局。

你不能,以及原因

  • 在这个视图中下载、上传或打开文件:点按文件没有任何反应,只有文件夹能打开。尚未提供
  • 删除仍有文件的文件夹:文件夹是通过 SFTP 的 rmdir 调用删除的,所以要先清空它。有意为之
  • 查看操作失败的原因:错误不会显示。无法读取的文件夹看起来是空的(此目录为空),重命名或删除失败后列表保持原样。尚未提供
从 更多选项 菜单删除单个项目没有确认步骤;只有多选删除才会询问。

双栏视图

SFTP — 拖放 并排显示你的手机和服务器。标题下方的提示是 长按以拖动。

你可以

  • 本地 面板从存放你的项目的文件夹开始;远程 面板从 / 开始。点按文件夹即可打开,用面板顶部的箭头回到上一级。
  • 用 单栏视图 返回。

你不能,以及原因

  • 通过拖动在两个面板之间复制文件:该页面提供了这个操作,但放下操作还没有接入传输功能,所以不会复制任何内容。尚未提供

传输队列

带有进度条的传输列表,有 取消 和 清除已完成。为空时显示 没有进行中的传输。

你可以

  • 查看排队中的传输(等待中、已完成、失败),取消其中一个,或用 清除已完成 清掉已结束的。

你不能,以及原因

  • 向队列中添加传输:应用中目前没有任何功能会往里发送文件,所以它始终显示 没有进行中的传输。尚未提供

从手机上传文件

SSH 会话中输入栏的 附加文件 按钮。

你可以

  • 点按 附加文件 并选择一个文件:它会通过 SFTP 上传到服务器的 /tmp/<file name>,路径会被输入到输入栏中,方便你接着输入下一条命令。

你不能,以及原因

  • 选择目标位置或保留已有的文件:文件总是放到 /tmp,同名文件会被覆盖。有意为之
SFTP — Drag & Drop: the Local pane with the phone's project folders next to the Remote pane showing the server's root directory
SFTP 双栏视图:左边是手机上的项目文件夹,右边是服务器

端口转发

端口转发让流量通过 SSH 连接传输。规则属于当前所在的会话。从工具栏或工具菜单的 连接 分组打开 端口转发;它需要已连接的会话。

端口转发

列出当前会话的规则(N 条规则)。

你可以

  • 添加规则 会打开一个表单:类型(本地 (L)、远程 (R) 或 动态)、标签、本地端口、远程主机(预设为 localhost)、远程端口 和 自动启动。
  • 本地 (L) 在你手机的某个端口上监听,并通过服务器把流量发送到 远程主机 的 远程端口(以服务器的视角解析)。例如,通过 localhost:5432 访问服务器上的数据库。
  • 远程 (R) 在服务器的 远程端口 上监听,并把流量发送到 远程主机 的 本地端口,从你的手机去访问(默认是 localhost)。例如,对外暴露运行在手机上的开发服务器。
  • 每条规则会显示 活动 或 已停止;可以启动、停止或删除它。
  • 关闭标签页或断开连接,会结束该会话的转发。

你不能,以及原因

  • 在免费版同时使用超过 1 条规则(按当前所在的会话计算)。Pro
  • 把 动态 当作 SOCKS 代理使用:这条规则的标签是 SOCKS 代理,并记录 SOCKS5 proxy on localhost:N,但应用实际是把该端口原样转发到同一端口号的 localhost,并不是 SOCKS5 代理。尚未提供
  • 在多次会话之间保留规则:规则不会随主机一起保存,所以下次连接时 自动启动 没有可启动的内容。尚未提供
要为运行在手机上的服务器提供公开链接,请使用 分享你的开发服务器;相关内容见 Linux 终端页面。

远程桌面(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 密钥(包括设备绑定密钥)、主机密钥验证、云服务商、软件包、同步与团队包含(无套餐检查)包含
在免费版,1 台已保存主机的上限在每个入口都生效:添加主机 在保存 1 台主机后就会停止,快速连接 仍会连接但不会保存主机,导入(JSON、SSH 配置、CSV)和云实例导入只会带入放得下的部分。提示页显示 Terminal Pro(解锁高级自动化、广播和多会话功能。),并带有 解锁 Terminal Pro 和 继续使用基础版。这里的 同步 是本地备份,不是 Pro 在设置中解锁的云同步。键盘宏、快捷脚本、Expect 规则、分屏和代码片段请见 Linux 终端页面。价格和完整列表请见 套餐与价格。

隐私与安全

  • 你的机密保存在哪里。 密码、私钥(生成的、导入的或粘贴的)和密钥口令保存在 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]。

无法导入密钥文件

文件是空的或无法读取。请选择私钥文件本身。