为什么服务端应用一定要长在浏览器里?试试基于 SSH 开发“永不断线”的终端应用 - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
LonnyWong

为什么服务端应用一定要长在浏览器里?试试基于 SSH 开发“永不断线”的终端应用

  •  1
     
  •   LonnyWong 4 days ago 5511 views

    在这个万物皆可 Web 化的时代,我们似乎忘了终端才是程序员最亲近的 UI 。

    如果你的应用(比如 AI 助手、监控工具、内网穿透)需要极致的低延迟和高稳定性,不如尝试挂在 tssh上。

    为什么是 tssh ?

    传统的 SSH 痛点:网络抖动就断线、切个 Wifi 就卡死,或休眠唤醒基本上就断了。

    tsshd 是类似 mosh 的工具,底层使用 UDP (KCP / QUIC) 协议,解决了 SSH 的痛点,也解决了 mosh 的硬伤(支持滚动和端口转发等)。

    同时 tsshd 也是一个 go 应用框架,你可以基于它开发各种 SSH 应用,自带抗掉线低延迟属性:

    • 无感重连:电脑合盖带走,换个地方打开,之前的会话依然活跃,状态完全不丢。
    • 极致低延迟:在丢包严重的网络下,UDP 的交互手感比 TCP 强太多,敲指令不会有那种“粘滞感”。
    • 跨平台接入:用户只需要一个 tssh + 任意终端,就完美支持 Windows/macOS/Linux ,甚至在 iPhone 上通过 rootshell 也能流畅访问。

    应用(抛砖引玉)

    • AI 交互新界面:给你的 LLM 加个 SSH 壳子,在任何终端随时 tssh 呼出,比网页响应更快,更极客。
    • “不掉线”的系统:那些需要实时盯着数据的监控看板或管理后台,用 tsshd 做成交互式菜单,随身查看。
    • 内网穿透与转发:不仅支持 TCP 转发,还支持 UDP 转发,底层切换网络上层业务无感知。

    其实只要是 HTTP 能干的事,SSH 都能干。如果你厌倦了为了一个小工具去折腾前端框架、配置域名证书,不如回归终端,玩点不一样的。

    开源地址: https://github.com/trzsz/tsshd

    中文文档: https://trzsz.github.io/cn/tsshd

    欢大家提建议,分享在终端里用过哪些有趣的 SSH 应用。

    73 replies    2026-05-11 17:50:33 +08:00
    churchmice
        1
    churchmice  
       4 days ago via Android
    现在这轮子真是造的飞起
    你那点需求 tmux 够用了
    LonnyWong
        2
    LonnyWong  
    OP
       4 days ago
    @churchmice tmux 就完美了吗?看看这个吧: https://bower.sh/you-might-not-need-tmux
    sir283
        3
    sir283  
       4 days ago
    怎么感觉你这东西,还没我这俩用 Ai 改的要实用呢?

    ======================================

    宇宙超级无敌,音乐下载器,支持无损音乐文件下载、批量下载、一键下载,支持歌单下载。
    支持酷狗、酷我、QQ 音乐、网易云、咪咕等音乐平台音乐搜索、下载。支持无损音乐文件下载。
    https://github.com/MrsEWE44/musicDownload


    ======================================

    轻风支持在 Dhizuku 模式下,强力删除无用的系统软件,强力冻结软件,一键静默安装软件,批量处理软件,系统软件恢复等等,还有更多功能没有写出来,赶紧下载体验吧!

    软件支持在安卓 10 以上系统,在 Shizuku 模式免 ROOT 情况下,对手机网络进行管控,也可以管理摇一摇传感器的权限,精准控制单个应用,也支持批量管理。

    https://github.com/MrsEWE44/easyManager/tree/md5
    kite12580
        4
    kite12580  
       4 days ago
    看过几次这个项目,主要还是装别的 ssh server 担心安全问题
    LonnyWong
        5
    LonnyWong  
    OP
       4 days ago
    tsshd 无需任何操作,会话一直在线,可以往上滚看历史输出。

    tmux 要重登录,要 attach ,看历史输出(一屏以外的)要用命令。
    LonnyWong
        6
    LonnyWong  
    OP
       4 days ago
    @kite12580 #4 开源的,代码量也不大,你可以用 AI 帮忙评估其安全性。
    yolee599
        7
    yolee599  
       4 days ago via Android
    ssh 是第一道门,最主要的是安全性和漏洞,其他都是次要的
    kapr1k0rn
        9
    kapr1k0rn  
       4 days ago
    96368a
        10
    96368a  
       4 days ago
    一直在用 trzsz-ssh ,好用的
    LonnyWong
        11
    LonnyWong  
    OP
       4 days ago
    @kapr1k0rn #9 Wish 是传统 SSH ,网络抖动就断线、切个 Wifi 就卡死,或休眠唤醒基本上就断了。

    tsshd 是 UDP 协议的,类似 mosh ,基于 tsshd 的应用自动获得不掉线和低延迟的能力。
    Mrun
        12
    Mrun  
       4 days ago
    传统的 ssh ,有着大量的安全审计和庞大的开源社区,核心技术公司帮忙盯着漏洞。你这个感觉安全还是太单薄了
    kapr1k0rn
        13
    kapr1k0rn  
       4 days ago
    不好意思前面没仔细看,所以你这个工具替代的是 sshd server ?
    rich1e
        14
    rich1e  
       4 days ago
    ntdll
        15
    ntdll  
       4 days ago
    如果解决的核心痛点只是 [不掉线和低延迟的能力]

    其实只需要通过一些 Zero trust 方案接入 SSH 就行了,顺带还提高的安全性。

    这类方案不论是开源、闭源,收费、免费的都有不少成熟的选择。

    比如 Cloudflare Tunnel 、Zerotier 、Wireguard 都是可行的。
    LonnyWong
        16
    LonnyWong  
    OP
       4 days ago
    @Mrun @kapr1k0rn tsshd 不提供登录服务,要通过传统 ssh 登录,然后启动一个 tsshd 进程,一次登录就是一个独立的 tsshd 进程,tsshd 进程会监听一个 UDP 端口用于后续通讯。

    tsshd 支持 QUIC 和 KCP 协议,密钥是启动时临时生成的一次性会话密钥,通过传统 ssh 通道发送给 tssh 客户端。
    chengdonghui
        17
    chengdonghui  
       4 days ago
    这个需求,ssh+screen 应该也可以解决吧
    LonnyWong
        18
    LonnyWong  
    OP
       4 days ago
    @chengdonghui #17 有区别:

    tsshd 无需任何操作,会话一直在线,可以往上滚看历史输出。

    tmux 或 screen 要重登录,要 attach ,看历史输出(一屏以外的)要用命令。
    JZen
        19
    JZen  
       4 days ago
    牛逼,支持
    laydown
        20
    laydown  
       4 days ago
    目前 ttyd 用着很舒服。支持造更多的轮子,有对比也不错。
    yangg
        21
    yangg  
       4 days ago
    需要另外开端口吗?
    tmux 那种一个会话新开一个窗口的功能或者临时分屏有计划吗?
    LonnyWong
        22
    LonnyWong  
    OP
       4 days ago
    @yangg 要开 UDP 端口的(在 UDP 受限的网络也支持 TCP 端口),协议上是支持开多个 session 的,不过 tssh 客户端要实现这个比较复杂,还不好与其他终端集成,所以暂时没有计划。看以后的发展吧,需求大的话,甚至可以 tssh 客户端自己实现分屏功能。
    Tiberisino
        23
    Tiberisino  
       4 days ago
    现在这个时代 做的项目仓库说明一定要有 ui 截图
    swananan
        24
    swananan  
       4 days ago
    我一直是 tmux 重度用户,暂时还没有特别的痛点,不过我很乐意尝试新的东西来提升自己的效率
    下面是除了 tmux 现有的特点以外,我很喜欢的功能:
    tmux 命令进入滚动模式,然后 vim 操作,很方便,而且还支持快速复制(越说越喜欢)
    tmux 支持记录 layout 这些,我可以通过脚本持久化 tmux 状态,并且一键恢复(比如服务端宕机这种场景)
    LonnyWong
        25
    LonnyWong  
    OP
       4 days ago
    @swananan 我也是 tmux 重度用户,不过我用 iTerm2 + tmux -CC ,我日常开发就用这个。

    不过,

    当我在 iPhone 上想临时登录一下服务器,我会用 rootshell + tsshd ,在移动中使用很爽。

    当我要登录海外服务器时,我会用 tssh + tsshd ,低延迟很舒适,不用再忍受按个键等半天的痛苦。
    LonnyWong
        26
    LonnyWong  
    OP
       4 days ago
    @Tiberisino 想截的,但断线重连好像在截图上不容易看出优势。

    除非用 AI 搞一个,拿着笔记本或手机坐电梯、地铁等,SSH 不掉线的视频?
    kite12580
        27
    kite12580  
       4 days ago
    @LonnyWong #6 毕竟我不是专家,而且系统 sshd 爆了漏洞我不背锅。不过是好想法,点个赞。目前靠的是 autossh + tmux auto attach 勉强用
    LonnyWong
        28
    LonnyWong  
    OP
       4 days ago   1
    @kite12580 tsshd 本身不提供登录服务的,也是背靠 sshd ,详见 #16 。

    先用传统 ssh 登录后,再启动的 tsshd 进程,我只要保证 tsshd 自己的 UDP 通讯是安全的就好了。而这通讯又是基于 QUIC ,背的 TLS1.3 的。

    在使用 KCP 协议时,也是使用 AES-GCM-256 加密,并且每小时或每流量达到 1GB 时,就通过 ECDH 换一次密钥,确保前向安全。
    yangg
        29
    yangg  
       4 days ago
    @LonnyWong 那就还是得+tmux
    而 tmux 滚动及一屏以外的体验实在是一般

    要是能一个应用替换两个应用,体验也好那就好了
    LonnyWong
        30
    LonnyWong  
    OP
       4 days ago
    @yangg 我是都用,日常开发我是用 iTerm2 + tmux -CC 。

    在 iPhone 中我用 rootshell + tsshd ,

    海外服务器用 tssh + tsshd (低延迟)。
    LonnyWong
        31
    LonnyWong  
    OP
       4 days ago
    @yangg @swananan 补充一点:

    tsshd 和 tmux 不冲突,可以同时用,双重不掉线保证,外加低延迟。
    swananan
        32
    swananan  
       4 days ago
    @LonnyWong tssh 我在用了,挺好的
    stiekel
        33
    stiekel  
       4 days ago
    仿佛回到了 telnet 时代。
    yangg
        34
    yangg  
       4 days ago
    好,你这个跟 et 有点类似,有什么优势和异同
    LonnyWong
        35
    LonnyWong  
    OP
       4 days ago
    @stiekel 时代不同了,现在用 bubbletea 写的终端应用很漂亮的。
    Immortal
        36
    Immortal  
       4 days ago
    怎么感觉很多人连 RREAME 都没耐心看完,这个和 tmux/screen 完全不是一个需求的东西
    LonnyWong
        37
    LonnyWong  
    OP
       4 days ago
    @yangg 我还是第一次知道 Eternal Terminal ,简单看了一下,确实很像。

    et 使用的是 TCP 协议,固定使用 2022 一个端口。

    tsshd 使用 UDP 协议,每个会话一个独立端口。

    都支持掉线重连。

    et 是自定义 TCP 协议,tssh 复用 QUIC 和 KCP 协议,tsshd 的延迟会更低。

    tsshd 还是一个中间件,大家可以基于 tsshd 开发自己的 SSH 应用。

    更多的还没细看,看来我要关注一下 et 。
    tkwl
        38
    tkwl  
       4 days ago
    @LonnyWong 如果是云上的服务器,需要指定可用的端口段吗?是否需要配合防火墙打开相应端口
    LonnyWong
        39
    LonnyWong  
    OP
       4 days ago
    @tkwl 对的,需要指定端口和放开防火墙,端口可以放开一个或多个或一段。

    支持 UDP 和 TCP ,首选 UDP ,TCP 只在迫不得已时才选。
    RogerReal
        40
    RogerReal  
       4 days ago
    2 年 tssh 用户来试试
    iyezi
        41
    iyezi  
       4 days ago
    我一直想给 tssh 加个 TUI 的 SFTP 面板/通过本地编辑器打开文件自动上传功能,以后会有相关计划吗?
    LonnyWong
        42
    LonnyWong  
    OP
       4 days ago   1
    @iyezi 可能会有。不过也有一些现成的很帅的文件管理工具,如 yazi 。

    可以本地打开 yazi ,配置快捷键调用 tssh 上传文件,你调起 tssh 进程时,tssh 进程会让你选服务器,选择后自动上传(通过 yazi 快捷键对应的命令指定),

    也可以在服务器打开 yazi ,配置快捷键调用 tsz 下载文件。
    aka863
        43
    aka863  
       4 days ago   1
    最近开始用,挺好的,解了以下我的痛点:
    1 、能简单的管理多个 ssh server
    2 、能记录密码,自动登录
    3 、解决了我的 MacBook 熄屏断连的问题
    4 、解决了传输文件需要使用 sftp 的问题
    感谢!!!
    xgdgsc
        44
    xgdgsc  
       4 days ago
    以前对这种有点需求,用过 et,现在 vscode remote 在 Windows modern standby 下好像也不会睡眠断开了,对这个需求不大了.
    EvineDeng
        45
    EvineDeng  
       4 days ago
    未来可以取代 openssh 吗
    EvineDeng
        46
    EvineDeng  
       4 days ago
    @LonnyWong #42 细说 yazi 快捷键如何设置怎么调用 tsz ?
    skywalker
        47
    skywalker  
       4 days ago
    看起来挺不错。有段时间我 mosh 很多,感觉在网络不稳定环境很好,后来放弃是因为我通过 frp 内网穿透访问,它需要设置一堆的 UDP 转发端口,如果有多台机器设置起来很麻烦,看了下楼主的这个实现好像也和 mosh 差不多需要 UDP 端口序列。另外 mosh/tmux 好像不支持 image preview ,有段时间我经常用 wezterm connect ,这个比较接近本地体验。现在用的比较多的是 zellij ,和 tmux 差不多,和 tssh 目标可能不同,tssh 在网络不稳定/漫游情况下更有用吧?如果网络稳定,tmux/zellij 这种 attach 一下其实问题也不大。
    LonnyWong
        48
    LonnyWong  
    OP
       4 days ago
    @EvineDeng #45 不取代 openssh ,共生关系,看 #16 或 README 中的介绍。
    LonnyWong
        49
    LonnyWong  
    OP
       4 days ago
    @EvineDeng #46

    # ~/.config/yazi/keymap.toml

    [[mgr.prepend_keymap]]
    on = [ "z" ]
    run = 'shell --block -- tsz -r "%h"'
    desc = "Send file with tsz"

    [[mgr.prepend_keymap]]
    on = [ "Z" ]
    run = 'shell --block -- tsz -r %s'
    desc = "Send selected files with tsz"

    第一个单选,第二个多选。我没测试过的,有问题你再找我。
    LonnyWong
        50
    LonnyWong  
    OP
       4 days ago
    @skywalker tsshd 比 mosh 强大,支持 UDP 转发,支持 ProxyJump ,不用你配置一堆 UDP 的东西。
    ilemon18
        51
    ilemon18  
       4 days ago
    搞点图片啊 那么多字谁看
    LonnyWong
        52
    LonnyWong  
    OP
       4 days ago
    @ilemon18 tssh 有图,tsshd 还没想好截个什么样的图,太偏技术了。
    sofukwird
        53
    sofukwird  
       4 days ago
    网络掉线重连啥的加个 wireguard 就好了
    LonnyWong
        54
    LonnyWong  
    OP
       3 days ago
    @sofukwird 适用场景不同,wireguard 改整机路由,不适合与其他 VPN 共用,配置也复杂一些。
    kite12580
        55
    kite12580  
       3 days ago
    @LonnyWong #28 这样确实好不少。试了试,可惜支持不了不受我控制的跳板机
    LonnyWong
        56
    LonnyWong  
    OP
       3 days ago
    @kite12580 #55 不受控制的跳板机,确实难搞。

    1 、要有个地方放 tsshd 二进制,不需要 root 用户,可以放在任意地方,但是登录后要能执行它。

    2 、要能让 tsshd 监听一个 UDP 或 TCP 端口,并且防火墙没有拦截它。
    yangg
        57
    yangg  
       3 days ago
    还是有问题哦,昨晚家里电脑 连接了 tssh 连接了云服务器,今天晚上回来断掉了,之前使用 et 和 mosh 时不会。还有如何查看当前选择的何种模式,比如 没有开 udp 端口时
    tkwl
      &nbp; 58
    tkwl  
       3 days ago
    @LonnyWong 请问一下这个 tsshd 系统是怎么启动的,如何通过 ssh 调起 tsshd ?
    另外如果用 tssh 直接 tcp 登录,那么应该是直接走的 ssh 和 tsshd 就没关系了吧?
    yangg
        59
    yangg  
       3 days ago
    @yangg 有一台服务器都没装 tsshd 也可以直接使用 tssh 连接,这样都不知道是否真的用上了 tssh 的重连功能
    LonnyWong
        60
    LonnyWong  
    OP
       3 days ago
    @yangg 文档中有写,你要加参数 --udp 或 --kcp ,或者在 ~/.ssh/config 中配置 #!! UdpMode yes 才会用 tsshd
    LonnyWong
        61
    LonnyWong  
    OP
       3 days ago
    @tkwl 原理可以看 README ,你用的话,没有加 --udp 或 --kcp 参数,并且没有在 ~/.ssh/config 中配置 UdpMode 就是 tcp ,与 tsshd 无关
    LonnyWong
        62
    LonnyWong  
    OP
       3 days ago
    @tkwl 不需要你来调起 tsshd ,你只要加 --udp 或 --kcp 参数,或在 ~/.ssh/config 中配置了 UdpMode ,那 tssh 会自动调起 tsshd ,对你是透明的。
    yangg
        63
    yangg  
       3 days ago
    好吧,这样要配置好多机器。
    yangg
        64
    yangg  
       3 days ago
    那不加,使用 tssh 有啥用?
    LonnyWong
        65
    LonnyWong  
    OP
       3 days ago
    @yangg 可以下面这样配置,并不需要每个服务器单独配置:

    Host *
    #!! UdpMode yes


    只用 tssh ,不用 tsshd 的用处也大了去了,详见:

    https://github.com/trzsz/trzsz-ssh

    中文文档: https://trzsz.github.io/cn/tssh
    tkwl
        66
    tkwl  
       2 days ago
    @LonnyWong 那我可以理解,tssh 是利用了 ssh 开启了一个 shell ,执行了指定目录下的 tsshd ;
    那是不是我不用每台服务器单独去安装,直接用 tssh 去自动检测这个 tsshd ,如果服务器有跳过,没有就自动安装,因为我看里面是 tssh 有这个 install 参数的
    LonnyWong
        67
    LonnyWong  
    OP
       2 days ago
    @tkwl 不会自动安装,你加了 install 则会安装,你可以在安装时指定目录。如果那个目录安装了,并且是最新版本,就会忽略,否则安装或更新。也可以自己安装,README 有安装指引。
    yangg
        68
    yangg  
       14h 34m ago
    @LonnyWong 按你这个配置了,家里差不多可以了

    Warning: Exit due to keep alive timeout [180s], ServerAliveInterval [60], ServerAliveCountMax [3]

    公司电脑局域网中午睡觉提示这个都挂了
    LonnyWong
        69
    LonnyWong  
    OP
       14h 13m ago
    @yangg 提示这个说明不是 UDP 模式,只是普通的 SSH 。你检查一下配置,也可以加 --debug 运行确认一下。
    yangg
        70
    yangg  
       13h 56m ago
    tssh --debug server3 ls
    For better debugging: run `tmux` first, then `tssh --debug`.
    debug: tssh version: trzsz ssh 0.1.25
    debug: /Users/brook/.config/tssh/tssh.conf or /Users/brook/.tssh.conf does not exist
    debug: open config [/Users/brook/.ssh/config] success
    debug: decode config [/Users/brook/.ssh/config] success
    debug: open config [/etc/ssh/ssh_config] success
    debug: decode config [/etc/ssh/ssh_config] success
    debug: extended config [/Users/brook/.ssh/password] does not exist
    debug: no extended config [DnsSrvName] for [server3]
    debug: no extended config [UdpMode] for [server3]

    奇怪,写了配置没生效。
    head ~/.ssh/config

    Host *
    #!! UppMode Yes
    LonnyWong
        71
    LonnyWong  
    OP
       13h 12m ago
    @yangg 你写了 Upp ,是 UDP ,不区分大小写的。
    yangg
        72
    yangg  
       12h 57m ago
    @LonnyWong 无语了,复制的,不知道怎么变了
    yangg
        73
    yangg  
       12h 57m ago
    @LonnyWong 多谢
    About     Help     Advertise     Blog     API     FAQ     Solana     1047 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 134ms UTC 22:48 PVG 06:48 LAX 15:48 JFK 18:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86