独立开发一个桌面 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;基础功能免费使用,移动端也在开发中。如果需要批量执行、云同步等进阶能力,再购买授权。