跳转到内容

独立开发一个桌面 SSH 工具:最麻烦的不是写代码

很多人看桌面软件,首先看界面。

好不好看,启动快不快,功能多不多,价格贵不贵。

这些当然重要。但真正做起来之后,我越来越觉得,桌面软件最烦的地方,往往不是写某个功能,而是功能之外那些必须补齐的事。

尤其是做 SSH 客户端。

表面上,它只是个“连服务器”的工具。实际上,你要处理的是跨平台桌面、终端兼容、凭证安全、安装包、更新、授权、下载、文档、用户反馈,以及各种真实服务器环境。

很多事情不性感,但少一个都会影响用户能不能长期用下去。

SSH 连接,只是最小那块

最小原型确实不复杂:保存主机、输入账号、选择密码或私钥、打开终端、执行命令。

但用户真正开始用之后,需求会快速展开。

他不只问“能不能连上”,他会问:

能不能分组管理很多机器?能不能导入已有配置?能不能走跳板机和代理?老服务器连不上怎么办?中文乱码怎么办?SFTP 怎么传文件?端口转发怎么开?常用命令能不能保存?多台机器能不能批量执行?能不能同步到另一台电脑?密码和私钥存在哪里?卸载重装后数据还在吗?Windows 便携版怎么迁移?下载包为什么会被安全软件拦?

这些问题都绕不开。

所以一个桌面 SSH 工具做到后面,其实更像是一个围绕服务器资产展开的工作台。SSH 连接只是入口。

跨平台:同一件事,两个问题

macOS 和 Windows 用户对软件的预期完全不同。

macOS 用户关心 Apple Silicon 和 Intel 包是否区分、是否签名、notarization 是否通过、第一次打开有没有安全提示、数据目录在哪里、keychain 权限是否正常、深色模式是否自然。

Windows 用户关心安装版还是便携版、安装目录在哪里、数据目录在哪里、防病毒软件会不会误报、卸载会不会删数据、便携版换电脑后怎么解锁、快捷方式和自动更新是否正常。

Linux 也需要考虑,但对我来说它目前更像是补充平台,先把 Ubuntu 支持好,让确实需要 Linux 版本的用户知道可以用。

同一个“本地保存数据”,在 macOS 上可能是 keychain 的问题,在 Windows 上可能是便携版迁移的问题。你不能只按一个平台的习惯设计。

跨平台不是把同一套界面编译两份。

安装包、签名和下载

很多独立开发者一开始会低估这件事。

代码能跑起来是一回事,让普通用户顺利下载、安装、打开、升级,是另一回事。

macOS 签名、notarization、Windows 安装包、便携压缩包、Linux 版本、自动更新、CDN、版本号、更新日志、回滚包、老版本兼容、安全软件误报,这些都要处理。

它们很少出现在产品宣传里。

但用户第一次下载失败、安装失败、打开失败,很可能就不会再试第二次。

桌面软件的第一印象,不是功能,而是能不能顺利跑起来。

终端:一个黑框里的细节工程

终端看起来就是个黑框。但做起来会发现,每个细节都有人在意。

字体、行高、主题、光标、复制粘贴、右键粘贴、选中复制、快捷键冲突、搜索、分屏、多标签、自动重连、中文宽度、GBK 编码、终端大小变化、远端程序全屏输出,这些东西单独都不是大功能,组合起来却决定了用户愿不愿意每天打开它。

开发者工具有个特点:用户可能一天打开几十次。这种频率下,任何小别扭都会被放大。

“极简”不是功能少,而是不要在高频操作里打断用户。

真实服务器会不断教育你

如果只在自己的几台云服务器上测试,很容易误判。

真实用户会带来老旧 Linux、奇怪的 SSH 算法、非 UTF-8 编码、多级跳板、公司代理、keyboard-interactive 认证、内网资产、Telnet 设备、串口设备、权限受限的 SFTP、已经在用的堡垒机系统。

这些问题很难一开始全部想到,只能在用户反馈里慢慢补。

这也是为什么做工具不能只追新概念。很多基础兼容能力不吸引眼球,但用户遇到时会非常真实地影响使用。

一个只服务 demo 环境的工具,很难进入真实工作流。

凭证安全:不能用口号代替边界

SSH 工具一定会碰到凭证:密码、私钥、代理密码、跳板机凭证、同步密码,全都敏感。

用户问“你会不会偷我的密码”,听起来尖锐,其实很正常。

对这类问题,光说“不会”是不够的。要说清楚本地是否明文保存、敏感字段怎么加密、加密密钥放在哪里、同步数据上传前是否加密、服务端能不能看到明文、密码丢了能不能恢复。

这些说明写起来不如新功能有成就感,但必须写。

尤其是不开源的商业软件,更要把边界讲清楚。用户未必要求你摊开所有代码,但至少要告诉他数据怎么处理。

安全信任不是一句口号,是具体的边界说明。

同步:比“传个文件”复杂得多

多设备同步的需求很合理。

公司电脑、家里电脑、笔记本之间切换,如果 SSH 资产和命令片段不能同步,体验会很割裂。

但同步一做,问题就来了:同步哪些数据?凭证是否同步?同步前是否加密?同步密码怎么处理?支持官方服务还是第三方存储?WebDAV、S3、iCloud、本地目录怎么适配?多设备同时修改怎么解决冲突?同步失败怎么提示?用户换电脑怎么恢复?

最关键的一点是,同步数据里可能包含服务器信息和凭证,服务端不应该能看到明文。

这会让实现复杂很多,但这是应该付出的复杂度。

定价:别把基础功能做成假免费

独立开发者做工具,收费是绕不开的问题。

不收费,很难长期维护。全订阅,很多开发者用户又天然排斥。尤其是本地工具,如果基础功能每个月都要付费,用户会觉得不舒服。

我更倾向于让付费点和持续成本对应起来。

本地 SSH、SFTP、端口转发、命令片段这些核心能力,如果没有明显的持续服务成本,就尽量让用户免费用。

云同步、多设备授权、批量执行、优先支持这些进阶能力,更容易解释为什么收费。

对开发者工具来说,用户通常很在意两件事:不要一上来就被订阅绑住;不要把基础功能做成假免费。

如果免费版能解决真实问题,用户会更愿意相信你不是只想收割试用流量。

文档:产品的一部分,不是附属品

很多功能如果没有文档,用户就等于不会用。

数据存储路径在哪里、本地加密口令忘了怎么办、SFTP 目录跟随怎么配置、AI 模型为什么要关闭 thinking 模式、同步冲突怎么处理、便携版怎么迁移,这些都需要写清楚。

而且文档不能只写给作者自己看。

作者知道系统怎么工作,很容易省略关键步骤。用户不知道,他只会看到一个弹窗、一段报错、一个不熟悉的配置项。

很多“用户不会用”的问题,本质是文档和界面没有把边界讲清楚。

AI:助手,不是自动化运维

现在不加 AI 好像就显得落后。

但 SSH 工具里的 AI,不能只为了追热点。服务器和代码仓库不同,AI 如果直接执行命令,风险会落到真实机器上。

所以我更愿意把 AI 定位成终端旁边的助手:看最近终端输出、分析错误、生成排查命令、解释日志、给下一步建议、在用户确认后执行。

而不是包装成“全自动运维 Agent”。

AI 功能越强,命令确认、风险判断和用户可见性就越重要。这类设计没那么好营销,但更适合服务器场景。

用户反馈会不断重排你的优先级

独立开发时,很容易陷入自己的想象。

你以为下一个版本应该做个很酷的新功能,用户可能只是想要:某个快捷键可以改、终端字体再细一点、SFTP 上传文件夹更稳定、某个老服务器能连上、Windows 便携版迁移更清楚、AI 命令确认别那么打断流程、同步冲突提示更明确。

这些需求不宏大,但决定用户会不会留下来。

工具软件不是写完一个大功能就结束,而是不断处理真实使用里的摩擦。很多时候,修掉小问题,比加一个新概念更有价值。

最后

做 Termark 之后,我越来越觉得:桌面软件最烦的不是写代码,而是把代码之外的事情一件件补齐。

安装、更新、签名、安全、同步、文档、兼容、授权、反馈,这些东西很少能带来一句漂亮的宣传语,却决定一个工具能不能长期维护下去,能不能真正进入用户的工作流。

取舍慢慢也清晰了:本地核心功能尽量免费;持续成本和进阶能力再收费;界面保持简洁,底层尽量照顾真实服务器环境;AI 可以提高效率,但服务器控制权要留在用户手里。

目前 Termark 支持 macOS、Windows 和 Linux,其中 Linux 版本目前主要支持 Ubuntu;基础功能免费使用,移动端也在开发中。如果需要批量执行、云同步等进阶能力,再购买授权。

官网:https://www.termark.app

Termark 使用文档