全功能 iOS SSH 终端客户端
Nexterm 是一款基于 Flutter 构建的现代化 SSH 终端客户端,专为 iOS 打造。集成多标签终端、SFTP/SMB/WebDAV 三协议文件管理、远程 Git 仓库管理、系统监控、Tmux 多路复用、Claude CLI 智能通知、语音输入、端口转发与 Web 预览、端对端加密云同步等专业级功能于一体。
| 功能 |
描述 |
| 多标签 SSH 终端 |
同时开启多个 SSH 会话,通过标签页自由切换;标签类型涵盖 SSH 终端、SFTP、WebDAV、SMB、Web 预览 |
| 跳板机链式连接 |
支持多级跳板机(Jump Host)链路,一键穿透内网访问目标服务器 |
| 断线自动重连 |
SSH 连接断开后指数退避自动重连,终端内显示重连状态,无需手动操作 |
| 自动 Tmux |
每台主机可配置连接时自动附加或创建 tmux 会话,支持自定义会话名;已有客户端时提示通知 |
| 启动命令 |
为主机配置连接后自动执行的 shell 命令或已保存的代码片段 |
| OSC 52 剪贴板 |
支持远程到本地的剪贴板同步(OSC 52 转义序列) |
| 编辑面板 |
多行文本输入面板,适合编写长命令或与 AI 助手交互;支持聊天模式自动换行 |
| 附件功能 |
从编辑面板发送附件:拍照、选择照片/视频、上传文件到远程主机,上传后自动插入远程路径 |
| 23 套统一主题 |
12 暗色 + 11 亮色主题(Nexterm、Dracula、Nord、Solarized、Gruvbox、Catppuccin、One Dark/Light、Tokyo Night、Monokai、Everforest、Kanagawa、Ayu、GitHub Light、Rosé Pine Dawn 等),选一个即同时切换终端配色与 App 界面风格 |
| 自定义字体 |
内置 JetBrains Mono、Source Code Pro、Fira Code、Ubuntu Mono 四款等宽字体 |
| 字体大小调节 |
在设置中调整(8~24pt)或在终端内双指缩放实时改变字号 |
| 可配置回滚行数 |
自定义终端缓冲区大小(100 ~ 1,000,000 行) |
| 光标样式 |
块状、下划线、竖线三种光标样式可选 |
| 触觉反馈 |
按键时的触觉振动反馈(可关闭) |
| 友好的错误提示 |
连接超时、认证失败、DNS 解析、网络错误等均提供中英双语提示 |
| 功能 |
描述 |
| 自定义键盘工具栏 |
13 组快捷键(终端控制、信号、符号、导航、标点、括号、编辑、搜索、方向键、剪贴板等),可拖拽排序、增删分组、控制显示组数 |
| Ctrl/Alt 修饰键 |
工具栏内置 Ctrl/Alt 切换按钮,与下一次按键组合发送 |
| 功能面板 |
底部面板三标签页——代码片段快速执行、命令历史搜索、全键盘网格视图 |
| 方向键面板(D-Pad) |
屏幕虚拟方向键叠加层,方便触屏操作 |
| 手势配置 |
双指点击、左滑、右滑、下滑手势均可自定义动作(粘贴、复制、切换标签、隐藏键盘、切换 D-Pad 等) |
| 使用频率排序 |
全键盘网格中按使用频率自动排序常用键 |
| 功能 |
描述 |
| 终端 Bell 通知 |
终端 BEL 信号触发系统通知(App 在后台时),不错过命令完成提醒 |
| Claude CLI 通知 |
深度集成 Claude Code CLI——远程服务器上 Claude 任务完成、请求权限、任务失败时自动推送本地通知;支持分项开关 |
| 远程推送通知 |
通过 Bark 服务发送远程推送通知,即使 App 被系统回收也能收到提醒 |
| 仅后台模式 |
可设置仅在 App 进入后台时才发送通知 |
| 通知声音 |
可选开启或关闭通知铃声 |
| 一键部署 |
从终端菜单一键将通知脚本和 Claude CLI hooks 部署到远程服务器 |
| 功能 |
描述 |
| 系统识别 |
使用 iOS 本地语音识别引擎,无需联网,点击切换模式 |
| 火山引擎(豆包) |
豆包大模型 2.0 流式语音识别,WebSocket 实时流式传输,长按说话模式 |
| 阿里云 NLS |
阿里云智能语音服务,WebSocket 流式识别 |
| 速度测试 |
云端引擎内置速度测试,验证连接质量 |
| 语言选择 |
可独立选择语音识别语言,识别完成自动输出到终端 |
| 功能 |
描述 |
| 主机分组与标签 |
通过分组和逗号分隔的标签整理主机,支持全文搜索过滤 |
| 认证方式 |
密码认证、SSH 密钥认证、键盘交互认证 |
| 收藏 |
常用主机标记收藏,快速访问 |
| 批量操作 |
全选、批量移动分组、批量删除 |
| 复制主机 |
一键复制主机配置 |
| SFTP 初始目录 |
可为每台主机配置 SFTP 默认进入目录 |
| 最近连接 |
记录最后连接时间与连接类型 |
| 导入 SSH Config |
从 ~/.ssh/config 文件一键导入主机列表(支持 Host、HostName、User、Port、IdentityFile、ProxyJump) |
| 功能 |
描述 |
| SSH 密钥管理 |
集中管理密钥,支持 Ed25519(推荐)、RSA-2048、RSA-4096 生成,可设置密码短语 |
| 密钥导入 |
从文件导入或粘贴 OpenSSH 格式密钥内容 |
| 密钥导出 |
导出公钥或私钥,一键复制公钥到剪贴板 |
| 生物识别解锁 |
支持 Face ID / Touch ID 快速解锁应用 |
| 自动锁定 |
可设置 1 / 5 / 10 / 30 分钟自动锁定 |
| 剪贴板自动清除 |
离开应用时自动清除剪贴板中的敏感内容 |
| 功能 |
描述 |
| 可复用命令片段 |
将常用命令保存为片段,支持分组与标签管理、收藏 |
| 变量占位符 |
在片段中定义 {{变量名}} 占位符,可设默认值和描述,执行时弹窗填入 |
| 多行命令 |
支持多行片段,逐行发送到终端 |
| 快速执行 |
从功能面板一键执行、从片段列表搜索执行、或作为主机启动命令自动执行 |
| 功能 |
描述 |
| 本地转发 |
将本地端口映射到远程地址,通过 SSH 隧道访问远程服务 |
| 远程转发 |
将本地服务暴露给远程服务器 |
| 动态转发 |
创建 SOCKS5 代理,通过 SSH 服务器转发全部流量 |
| 自动启动 |
可设置端口转发随 SSH 连接自动启动 |
| 端口检测 |
扫描远程服务器监听的 TCP 端口(通过 ss/netstat/lsof),显示进程名、PID、协议类型,支持一键添加转发规则 |
| Web 预览 |
在 App 内嵌入 WebView 直接预览已转发端口的 Web 服务,无需切换浏览器 |
| 已知端口映射 |
内置 30+ 常用服务端口识别(MySQL、PostgreSQL、Redis、MongoDB、Nginx、Docker 等) |
| 功能 |
描述 |
| 多协议支持 |
SFTP、SMB/CIFS、WebDAV 三种远程文件协议,统一文件浏览器界面 |
| 文件浏览器 |
面包屑导航、路径跳转、排序(名称/大小/日期/类型)、隐藏文件切换 |
| 上传与下载 |
文件上传下载,传输队列显示实时进度 |
| 代码编辑器 |
内置语法高亮编辑器(flutter_highlight),支持编辑/预览切换 |
| Markdown 渲染 |
内置 Markdown 预览器,支持目录导航 |
| 图片查看器 |
远程图片在线预览 |
| 视频播放器 |
内置播放器(基于 media_kit/mpv),通过本地 HTTP 代理服务器实现边下边播、Range Request 支持、进度拖拽 |
| 文件操作 |
复制、粘贴、重命名、删除(递归)、新建文件夹、权限修改(chmod)、复制路径 |
| 左滑删除 |
文件列表和连接列表支持左滑删除 |
| SMB 自动重连 |
网络中断后自动重连,支持错误恢复 |
| 功能 |
描述 |
| CPU 使用率 |
实时折线图展示 CPU 使用率变化 |
| 内存使用率 |
已用/空闲/总量内存实时监控 |
| 磁盘使用 |
各分区磁盘空间占用一览 |
| 网络流量 |
实时 RX/TX 网络速度图表 |
| 运行时间与负载 |
显示系统 Uptime 和 Load Average |
| 跨平台 |
同时支持 Linux(/proc 文件系统)和 macOS(top/vm_stat/netstat)远程服务器 |
| 功能 |
描述 |
| 会话管理 |
列出远程 tmux 会话,显示窗口数、客户端数、创建时间 |
| 一键附加 |
快速附加到已有 tmux 会话 |
| 新建会话 |
创建自定义名称的新 tmux 会话 |
| 结束会话 |
删除不需要的 tmux 会话 |
| 自动检测 |
自动检测远程主机是否安装 tmux |
| 自动 Tmux |
每台主机可独立配置连接时自动附加/创建 tmux 会话 |
| 功能 |
描述 |
| 工作树状态 |
查看远程仓库的 staged/unstaged/untracked 文件变更及状态码 |
| 分支管理 |
浏览本地与远程分支,支持搜索过滤、当前分支指示、滑动删除 |
| 分支图 |
自定义画布可视化分支合并历史,显示合并点与引用标签 |
| 提交日志 |
查看分支提交历史,支持单文件历史,点击查看变更文件列表 |
| Diff 查看 |
统一 Diff 视图,支持行级高亮与字符级内联差异对比 |
| 标签管理 |
浏览标签列表,支持 checkout、脏工作树 stash-and-checkout、删除 |
| Git 仓库收藏 |
保存常用主机 + 路径组合,从保险库或终端快速打开 |
| 自动检测工作目录 |
从终端打开时自动检测 PTY shell 的当前工作目录 |
| Git 初始化 |
目录不是 Git 仓库时提示初始化 |
| 功能 |
描述 |
| 端对端加密同步 |
数据在设备端通过 AES-256-GCM 加密后上传,服务器仅存储密文 |
| 账户系统 |
邮箱 + 密码注册与登录 |
| 多设备管理 |
管理已授权的同步设备(设备 ID 标识) |
| 加密备份与恢复 |
导出加密 JSON 备份文件,通过系统分享面板分享或在新设备还原 |
| 功能 |
描述 |
| 多语言支持 |
中文 / English,可跟随系统语言 |
| 保险库首页 |
分类入口——连接(主机、WebDAV、SMB)、工具(端口转发、片段、Git 仓库)、密钥链(SSH 密钥) |
| 会话面板 |
活跃连接数、活跃转发数、主机总数、最近连接历史一览 |
| 导出数据 |
将所有主机、密钥、片段导出为加密 JSON 文件 |
| 层次 |
技术 |
| 移动客户端 |
Flutter 3.29+ / Dart 3.7+ |
| 状态管理 |
Riverpod 2 + riverpod_generator |
| 路由 |
go_router |
| 本地数据库 |
Drift (SQLite) |
| SSH 协议 |
dartssh2 |
| 终端渲染 |
xterm.dart |
| 文件协议 |
SFTP (dartssh2) / SMB (smb_connect) / WebDAV (webdav_client) |
| 视频播放 |
media_kit (mpv) |
| 图表 |
fl_chart |
| 加密 |
pointycastle (AES-256-GCM, PBKDF2) |
| 后端 |
FastAPI (Python 3.12) |
| 数据库 |
PostgreSQL |
| 认证 |
JWT (PyJWT + bcrypt) |
Nexterm/
├── nexterm/ # Flutter 移动端应用
│ ├── lib/
│ │ ├── core/ # 加密、路由、主题、国际化、通知等基础设施
│ │ ├── data/ # 数据库、DAO、Repository 实现
│ │ ├── domain/ # 实体定义与 Repository 接口
│ │ ├── features/ # 按功能划分的模块
│ │ │ ├── forwarding/ # 端口转发与端口检测
│ │ │ ├── git/ # Git 远程仓库管理
│ │ │ ├── hosts/ # 主机管理
│ │ │ ├── keys/ # SSH 密钥管理
│ │ │ ├── monitor/ # 系统监控仪表盘
│ │ │ ├── multiplexer/ # Tmux 多路复用器
│ │ │ ├── settings/ # 应用设置与安全
│ │ │ ├── sftp/ # SFTP/文件管理(含视频播放、编辑器)
│ │ │ ├── smb/ # SMB/CIFS 连接
│ │ │ ├── snippets/ # 代码片段
│ │ │ ├── sync/ # 云同步与账户
│ │ │ ├── terminal/ # 终端(含键盘、手势、语音、Claude CLI 集成)
│ │ │ ├── vaults/ # 保险库首页
│ │ │ └── webdav/ # WebDAV 连接
│ │ └── shared/ # 全局共用 Widget
│ ├── assets/fonts/ # 内置等宽字体
│ └── test/ # 单元测试与集成测试
├── server/ # FastAPI 云同步后端
│ ├── app/
│ │ ├── api/ # 路由:auth / sync / devices
│ │ ├── core/ # 配置、数据库连接、安全工具
│ │ ├── models/ # SQLAlchemy ORM 模型
│ │ ├── schemas/ # Pydantic 请求/响应模型
│ │ └── services/ # 业务逻辑层
│ └── tests/ # pytest 测试套件
└── docs/ # 架构设计文档
└── architecture/
cd nexterm
# 安装依赖
flutter pub get
# 运行代码生成(Drift DAO、Riverpod Provider)
dart run build_runner build --delete-conflicting-outputs
# 启动应用(连接已有模拟器或真机)
flutter run
cd server
# 创建虚拟环境
python -m venv venv && source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
# 配置环境变量
cp .env.example .env # 按需修改 DATABASE_URL、JWT_SECRET 等
# 启动服务(开发模式,自动重载)
uvicorn app.main:app --reload --port 8000
待补充。