V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
LonnyWong
V2EX  ›  分享创造

低延迟、支持漫游、不会掉线的 ssh(比同类 13K 多 star 的老项目,功能还要更强,体验也要更优)

  •  
  •   LonnyWong · 6 天前 · 2536 次点击

    疯狂投入了十几个周末进行优化,在一个 issue 里和用户共讨论了 150 多楼,每周末都开发出一个新的 RC 版本,从 RC1 干到 RC11 ,终于发布了一个稳定版。

    作为一个新项目,知道的人还不多,现在才 100 多的 star ,却比同类老项目( mosh: 13k 多的 star )的功能强大很多,详见 README 里的功能对比。支持 多平台低延迟保持连接切换网络SSH X11 转发SSH Agent 转发SSH 端口转发输出上下滚动OSC52 复制粘贴多级 ProxyJumptmux -CC 集成等。

    欢迎大家来试用,与同类老项目 mosh 比较比较。在服务器安装 tsshd,在本地安装 tssh,然后使用下面的命令登录服务器即可:

    tssh --udp <服务器 IP 或别名>
    

    注意 tsshd 默认随机监听 61001 - 61999 的 UDP 端口,防火墙要放开相应策略。支持在命令行指定 UDP 端口和 tsshd 安装路径,如下:

    tssh --udp --tsshd-path /path/on/server/tsshd --tsshd-port 10000-10010 xxx
    ( 和 ssh xxx 一样的效果,配置可写在 ~/.ssh/config 中,然后直接 tssh xxx 登录 )
    
    • 使用 tsshd ,你的 ssh 可以避免掉线(从此告别 ssh 在弱网环境下经常掉线的苦恼,无需经常重新登录)
    • 使用 tsshd ,你的 ssh 可以支持漫游(举例:你的笔记本在公司 ssh 登录后,带回到家还可以保持连接)
    • 使用 tsshd ,你的 ssh 可以获得低延迟(特别适用于海外服务器,避免 ssh 按键不跟手的情况)。tsshd 支持 KCP 协议(可以获得更稳定的更低的延迟),命令行通过 tssh --kcp xxx 启用,也支持配置指定 KCP 协议(默认使用传输吞吐量更高一些的 QUIC 协议)。

    作为 ssh 工具,tssh 和 tsshd 都很注重安全的,详见 README 里的安全介绍。欢迎各位大佬来分析评估其安全性。(说到安全,我周末基本都献给开源 了,CTF 界少了个 PWN 选手,开源界多了几个项目: trzsztsshtsshd 等)

    服务端开源(对标 mosh ,并提供相应 Client 库):tsshd https://github.com/trzsz/tsshd

    客户端开源(支持标准 ssh ,扩展了很多实用功能):tssh https://github.com/trzsz/trzsz-ssh

    38 条回复    2026-01-23 10:53:01 +08:00
    LonnyWong
        1
    LonnyWong  
    OP
       6 天前
    dXA=
    yangg
        2
    yangg  
       6 天前
    好奇,示例--udp 是否是推荐的写法?为啥没有写成默认参数
    LonnyWong
        3
    LonnyWong  
    OP
       6 天前
    @yangg tssh 是对标标准 ssh 客户端的,不加 --udp 时,是完全兼容 openssh ,此时 tssh 可以直接代替 ssh 来使用,除了 tssh 额外提供的功能,和 ssh 没什么区别。

    tsshd 是对标 mosh 的,相当于 mosh 的 mosh-server ,也相当于 openssh 的 sshd 。

    tssh --udp 主要是给新用户临时体验的,如果用户想默认使用 tsshd 作为服务器,只要在 ~/.ssh/config 中配置 UdpMode yes 即可,这时就不需要加 --udp 参数了。
    yangg
        4
    yangg  
       6 天前
    @LonnyWong 好的,谢谢。
    有时间体验下,前段时间还在想为啥我的 ssh 老是休眠断,原来是现在没有 mosh 了
    listenerri
        5
    listenerri  
       6 天前
    感谢分享
    LonnyWong
        6
    LonnyWong  
    OP
       6 天前
    @yangg 之前我用 ssh ,也是去吃个饭就断了。tssh 命令行参数就是为了临时体验用的,目的是体验时一般不用修改 ~/.ssh/config 配置。
    pursuer
        7
    pursuer  
       6 天前
    用 tmux 就不用担心掉线和漫游问题了吧
    LonnyWong
        8
    LonnyWong  
    OP
       6 天前
    @pursuer tmux 可以解决你在服务器运行的程序不用重新运行的问题。tsshd 可以解决你不用重新登录的问题,运行中的程序也不用重新运行,不依赖 tmux 等。
    molezznet
        9
    molezznet  
       6 天前
    一直在用 tssh ,tsshd 是作者又开发了一个服务端了咯?
    pursuer
        10
    pursuer  
       6 天前
    重新登录这个在 ssh 客户端上配一下就能一键登录,还能顺便并连接到 tmux ,也不是强需求的样子
    LonnyWong
        11
    LonnyWong  
    OP
       6 天前
    @molezznet 是的,tsshd 是服务端,对标 mosh 的,tsshd 开发出来有 2 年了,不过前天发布的 tsshd v0.1.6 是一个成熟的版本的。之前的 tsshd 能解决低延迟的问题,断线重连是从 v0.1.5 才支持的,从 v0.1.6 开始稳定的。
    LonnyWong
        12
    LonnyWong  
    OP
       6 天前
    @pursuer 如果你只在很好网络环境下 ssh ,并且不介意多登录一下,确实不是很强的需求。如果你在不太好的网络环境下 ssh ,你的延迟可能比较高(按键不跟手),网络太差(例如移动中的网络)导致你要频繁重登录,那 tsshd 就会很好用。
    w568w
        13
    w568w  
       6 天前   ❤️ 1
    哎,本来想支持一下,发现早就 star 过了
    conical
        14
    conical  
       6 天前 via Android
    @w568w +1
    Cola90
        15
    Cola90  
       6 天前
    看着很不错,先 starlet
    craftsmanship
        16
    craftsmanship  
       6 天前 via Android
    好奇问下 AI 辅助编程及完全 vibe coding 占比多少 以及是否有效?
    LonnyWong
        17
    LonnyWong  
    OP
       6 天前
    @craftsmanship 近期有用 AI ,但 AI 写的代码占比极低。会让 AI 帮忙 review 我写的所有代码,AI 有时会发现一些超低级错误(避免测试时浪费时间),但 AI 很多时候都会乱说。少数功能会让 AI 先写,看 AI 的思路是否会给我启发,但更多时候都是我在指正 AI 的错误,大多数时候 AI 都会承认其错误,个别时候 AI 死都不认错,只能新开会话或换个 AI 。
    LonnyWong
        18
    LonnyWong  
    OP
       6 天前
    @craftsmanship 对了,很多注释我会让 AI 帮我写,写得我满意的我就会采用。
    craftsmanship
        19
    craftsmanship  
       6 天前 via Android
    @LonnyWong 顺便问一下 常用模型是什么呢?
    LonnyWong
        20
    LonnyWong  
    OP
       6 天前
    @craftsmanship ChatGPT
    loveqianool
        21
    loveqianool  
       6 天前 via Android   ❤️ 1
    很好用的,用很久了。
    MindMindMax
        22
    MindMindMax  
       6 天前
    国内端口转发用 QUIC 、KCP 能行得通吗? QoS 严重呀。
    zagfai
        23
    zagfai  
       6 天前
    虽然但是, 我用 tmux.
    zagfai
        24
    zagfai  
       6 天前
    然后 ssh over vmess.:)
    LonnyWong
        25
    LonnyWong  
    OP
       6 天前
    @MindMindMax 用户反馈正常使用时延迟下降了。在国内环境,跨境大流量转发,不是 tsshd 置力于解决的问题。
    LonnyWong
        26
    LonnyWong  
    OP
       6 天前
    @zagfai 我也用 tmux ,不过 mosh 有 13k 多的 star ,这说明也有很多人喜欢 tmux 以外的解决方案的。
    MindMindMax
        27
    MindMindMax  
       6 天前
    @LonnyWong 你理解错了,我说的就是国内跨网的问题,不涉境外通信的。
    LonnyWong
        28
    LonnyWong  
    OP
       6 天前
    @MindMindMax 国内其实还好,很多游戏都是用 KCP 协议的,并且 QUIC 也是未来的方向。有 QoS ,但不是完全禁掉了 UDP 报文。还是要试用一段时间,自己感受一下,会更准确。
    LonnyWong
        29
    LonnyWong  
    OP
       6 天前
    @MindMindMax 如果你所在的网络环境 QoS 特别严重,tsshd 还支持 TCP 模式,同样具备不会掉线和支持漫游的能力。
    MindMindMax
        30
    MindMindMax  
       6 天前
    @LonnyWong 好的,我试试
    goodryb
        31
    goodryb  
       6 天前
    请教下 “tsshd 默认随机监听 61001 - 61999 的 UDP 端口” ,这个为啥是随机监听,并且是一段端口,有点像是 ftp 的被动模式
    LonnyWong
        32
    LonnyWong  
    OP
       6 天前
    @goodryb tsshd 是在指定的端口范围随机监听一个,客户端会连接这个端口。同一台机器你可以登录多次,每次登录都是一个独立的 tsshd 进程,每个 tsshd 进程独占一个端口。独立的进程和独立的端口,可以更简单地实现隔离,不同的用户登录同一台服务器时,互不干涉。
    goodryb
        33
    goodryb  
       6 天前
    @LonnyWong #32 了解了,建议把使用文档可以在写完整一些,特别是对于没有使用过 mosh 的,比如我 哈哈
    LonnyWong
        34
    LonnyWong  
    OP
       6 天前
    @goodryb 我抽空再优化一下
    Javin
        35
    Javin  
       4 天前
    没看到支持 mac ,只能编译安装吗
    LonnyWong
        36
    LonnyWong  
    OP
       4 天前
    @Javin 也可以在 release 中下载,我打算看到有把 mac 作为服务器的用户,再提交到 homebrew 去。
    zisen
        37
    zisen  
       2 天前
    能不能指定 config 文件呢,默认的 config 文件不能乱动,动了 vscode 和 cursor 就连不上了
    LonnyWong
        38
    LonnyWong  
    OP
       2 天前
    @zisen 1 、在默认的 ~/.ssh/config 配置时,可以加 #!! 前缀,就不影响 vscode 和 cursor 等了。

    2 、使用新的 config 配置文件,增加一个 ~/.tssh.conf 或者 $XDG_CONFIG_HOME/tssh/tssh.conf 文件,在里面指定 ConfigPath = ~/.ssh/my_new_config ,这时只读 ~/.ssh/my_new_config 配置,不读 ~/.ssh/config 配置。

    3 、扩展 ~/.ssh/config 配置,和第 2 步差不多,ConfigPath 换成 ExConfigPath = ~/.ssh/my_extend_config ,这里会既读 ~/.ssh/config 也读 ~/.ssh/my_extend_config 配置。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2603 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:26 · PVG 19:26 · LAX 03:26 · JFK 06:26
    ♥ Do have faith in what you're doing.