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

采用 Java 开发的 SSH/终端工具,希望大家给点建议

  •  4
     
  •   powersee · 18 天前 · 6187 次点击

    为什么要做这个?

    目前市面上大多数客户端都是基于 Electron 或 HTML 开发,我个人不太喜欢这种“塑料的感觉”(并不是贬义,缺乏真实触感的体验)。因此,我选择使用 Java Swing 开发一个桌面端客户端。

    核心部分采用 Kotlin 开发,最终目标是通过 Kotlin Multiplatform 打造一款全平台的 SSH/终端 工具。

    功能特色

    • 支持多标签页
    • 数据加密存储
    • 通过 Gist 同步配置
    • 宏功能
    • 密钥管理
    • Find Everywhere
    • ...

    目前尚不支持 SFTP/FTP 等

    XTerm 协议部分

    使用 Kotlin 实现了 XTerm 协议(尚未完全实现)。桌面端的渲染层基于 Java Swing ,未来计划将这一部分迁移到 KMP ,从而实现真正的跨平台支持(包括移动端)。

    在实现协议的过程中,参考了许多经典的客户端,例如:

    预览


    后续发展

    • 命令提示(这部分我还在构思,如何准确获取用户输入的命令?)
    • AI 功能
    • 增加团队协同功能
    • 支持 Telnet
    • 支持 X-Server
    • 支持 VNC Viewer
    • SFTP/FTP
    • 串口
    • ...

    这是一个长期发展的项目。


    希望大家给点建议 🙏

    项目地址:https://github.com/TermoraDev/termora

    117 条回复    2025-01-12 18:20:36 +08:00
    1  2  
    shuangbiaog
        1
    shuangbiaog  
       18 天前
    点个星星支持一下,个人觉得 ai 功能不太合适
    powersee
        2
    powersee  
    OP
       18 天前
    @shuangbiaog #1 感谢。我也觉得 AI 不合适,因为“太花里胡哨”了,这个优先级不会太高。但是,我对 X-Server 挺感兴趣的,可能会尝试实现一下,会完全采用 Kotlin 开发,后续跨平台也好兼容。
    XDiLa
        3
    XDiLa  
       17 天前
    感觉和 Termius 差别不大 但是管理主机方便 Termius 更加便捷吧。还有就是这种 ssh 终端工具太多了 很少能有非常吸引人的地方。我看你和 Wave 很像
    XDiLa
        4
    XDiLa  
       17 天前
    等你证书下来了我在安装体验一下,从你发的截图看 UI ,感觉是尚可的
    XDiLa
        5
    XDiLa  
       17 天前
    感觉你后续发展的目标非常和 Warp 类似
    powersee
        6
    powersee  
    OP
       17 天前
    @XDiLa

    #3 目前来说,Termius 是更加方便的

    #4 苹果这个证书有点麻烦,我被限制了,苹果团队还在处理中; UI 参考了 IDEA 的

    #5 我个人是比较反对终端 “美化” 的,其实我更喜欢 XShell 这种原生质感
    czhh
        7
    czhh  
       17 天前
    和 finalshell 啥区别
    powersee
        8
    powersee  
    OP
       17 天前
    @czhh 非常丝滑,可以试试,尤其是使用输入法的时候,可以非常明显的体验出来。

    功能来说,finalshell 更完善一些。
    yellowstrong
        9
    yellowstrong  
       17 天前   ❤️ 1
    下载体验了一下,跟作者观点一致,比一众 chrome 套壳应用体验可好太多了,后续希望能长期发展下去
    bobobobob
        10
    bobobobob  
       17 天前
    Java Swing ,想起我的大学时光了。。。
    powersee
        11
    powersee  
    OP
       17 天前
    @yellowstrong #9 感谢。会持续维护的,个人觉得 JVM 的性能还是比 Electron 的效率高一些。
    powersee
        12
    powersee  
    OP
       17 天前
    @bobobobob #10 配合 FlatLaf 还是挺漂亮的
    bobobobob
        13
    bobobobob  
       17 天前
    @powersee 确实,感觉颜值挺高的
    shewhen
        14
    shewhen  
       17 天前
    帅啊,

    感觉很流畅
    liansishen
        15
    liansishen  
       17 天前
    star 了,等后续更新
    iyiluo
        16
    iyiluo  
       17 天前
    ssh 客户端加 ai 功能感觉挺离谱的,这不是把命令隐私都泄露了吗,没必要。ftp 的功能反倒优先级更高
    shewhen
        17
    shewhen  
       17 天前   ❤️ 1
    期待加入 SFTP ,干翻 Termius ,FinalShell ,XShell !✨✨✨
    powersee
        18
    powersee  
    OP
       17 天前
    @shewhen #14 感谢使用。我通过 history 生成过百万行,也依然非常流畅。

    可以通过 “设置 - 终端” 修改历史行数。

    我采用全新思路设计了终端渲染和终端协议处理,无论数据再多也不会影响渲染效率,具体可以参考: https://github.com/TermoraDev/termora/blob/1.0.0/src/main/kotlin/app/termora/terminal/Terminal.kt
    powersee
        19
    powersee  
    OP
       17 天前
    @iyiluo #16 是这样,我觉得 AI 比较鸡肋,我个人是比较反对的,后续我会考虑如何以 “方便、效率、易用” 的方面来接入 AI 。我比较倾向于: https://plugins.jetbrains.com/plugin/14823-full-line-code-completion 这种,完全本地化运行,但是我没有这方面的经验
    lozzow
        20
    lozzow  
       17 天前
    希望加入 Quake Mode
    powersee
        21
    powersee  
    OP
       17 天前
    @lozzow #20 “Quake Mode” 是什么?我没了解过,有相关文档吗?🤣
    thetbw
        22
    thetbw  
       17 天前   ❤️ 1
    java 之光
    molezznet
        23
    molezznet  
       17 天前
    先 star 再试用
    比起 ai 什么, 还是期待 trzsz 之类或 sftp 之类的优先级
    powersee
        24
    powersee  
    OP
       17 天前
    @molezznet #23 是的。我把 AI 排的比较靠后
    ZeroDu
        25
    ZeroDu  
       17 天前
    win 测试了一下不错,丝滑,比用 Electron 的好多了 ,终端用来用去还是 xshell 顺手,功能全。不过 Termius 的这种 ui 其实还可以的
    ZeroDu
        26
    ZeroDu  
       17 天前
    @ZeroDu #25 主页,选择主机,回车没有加事件吗
    ZeroDu
        27
    ZeroDu  
       17 天前
    @ZeroDu #25 快捷键应该需要完善一下
    molezznet
        28
    molezznet  
       17 天前
    @ZeroDu 启动有优势, 不过内存占用没优势
    ZeroDu
        29
    ZeroDu  
       17 天前
    @molezznet #28 这个确实是,java 系的东西往往性能不差,就是内存占用这个是真的大
    XiLingHost
        30
    XiLingHost  
       17 天前
    似乎没有支持 24 位深度色彩(TrueColor)终端,使用 btop 的 truecolor 模式会渲染出错,就像 xshell 一样,应该是只做了 256 色支持
    powersee
        31
    powersee  
    OP
       17 天前
    @ZeroDu #25 不可否认的是 在 Windows 上 XShell 是不二之选,毕竟发展了十几年了。

    #26 后续加上

    #27 快捷键后续会出个管理页面,可以自定义快捷键等等
    powersee
        32
    powersee  
    OP
       17 天前
    @XiLingHost #30 我会进行测试。是 https://github.com/aristocratos/btop 吗?
    szdev
        33
    szdev  
       17 天前
    作为苹果用户,真的比较抵触 java 开发的软件,占用内存太严重了,之前比较喜欢用 FinalShell 运行久一点就是好几个 G 内存,后面接触到了 termius 一直在用就是因为内存占用好太多了~
    yannxia
        34
    yannxia  
       17 天前
    不错不错,这个还挺快的,已经 star ,帮
    randomstream
        35
    randomstream  
       17 天前
    star star, 希望比 Electron 系列体验好
    Loku
        36
    Loku  
       17 天前
    SFTP 优先级高一点,AI 是没必要吧?
    powersee
        37
    powersee  
    OP
       17 天前
    @szdev #33 Finalshell 我研究过,我不知道它为什么启动就占用 1G ,可能哪里有问题。不过我开发的这个内存占用好很多,Java 的缺点就是不会及时归还内存给操作系统。
    powersee
        38
    powersee  
    OP
       17 天前
    @yannxia #34 感谢

    #35 我觉得比 Electron 好很多,如果体验一下就可以感觉出来

    #36 是的,SFTP 优先级高一些,AI 优先级不高
    XiLingHost
        39
    XiLingHost  
       17 天前
    @powersee 是,可以尝试使用任意在终端渲染真彩色的应用测试
    Cooky
        40
    Cooky  
       17 天前
    支持,只要够快,够省内存就好
    qianchengv
        41
    qianchengv  
       17 天前
    @shewhen #14 老哥,你这个录屏 gif 的工具叫啥名,求一个
    qianchengv
        42
    qianchengv  
       17 天前
    Java 之光,挺美观; 我觉得如果可以参考 warp 加入一点 AI ,然后支持 macOS 上的 brew install 方式安装就更完美
    powersee
        43
    powersee  
    OP
       17 天前
    @qianchengv #42 后续会加入,因为苹果开发者证书还没下来,所以需要一段时间
    minami
        44
    minami  
       17 天前
    只要不是 Electron/CEF 就点赞
    minami
        45
    minami  
       17 天前
    @powersee #20 就是下拉式终端,比如 KDE 的 Yakuake
    w292614191
        46
    w292614191  
       17 天前
    相比:
    https://xterminal.cn/
    https://www.hostbuf.com/
    有什么优势或者特别点吗?
    powersee
        47
    powersee  
    OP
       17 天前
    @w292614191 #46

    相比于 xterminal 、termius 、electerm 这类的最大区别是前者使用 electron 开发,而 termora 使用 java 开发,个人觉得在丝滑程度略层一筹。

    相比于 finalshell ,虽然与 termora 都是 java 开发,前者渲染基于 jediterm ,在性能和易用性不如 termora (通过调用输入法可以对比出来),finalshell 的内存占用异常的高,termora 就好很多。但不可否认的是,finalshell 目前的功能是比 termora 多的。
    Lowae
        48
    Lowae  
       17 天前 via Android
    居然看到 kmp 的项目了,star 了。
    不过要迁移的话可能改动也不小,ui 层基本需要替换为 compose
    powersee
        49
    powersee  
    OP
       17 天前
    @Lowae 后续有开发移动端的计划,主要是核心渲染部分。会抽象出 VisualTerminalDisplay ,然后底层使用 skiko 绑定到各个平台就好,改动的确不会太小
    lscho
        50
    lscho  
       17 天前   ❤️ 2
    Java 和 Electron 谁也别说谁,半斤对八两。。。。
    sn0wdr1am
        51
    sn0wdr1am  
       17 天前
    x11 Forwarding.
    Ccf
        52
    Ccf  
       17 天前
    等 macos 正式版
    w3cll
        53
    w3cll  
       17 天前
    Swing 的 UI 你是从哪里找的
    willgyw
        54
    willgyw  
       17 天前
    太棒了,已 star
    换了 macOS 之后一直想找一个像 Xshell 一样支持 Zmodem 的客户端,无奈只能用 item2 。
    刚才试用了一下发现体验很棒,应该会继续用一段时间。
    smilenceX
        55
    smilenceX  
       17 天前
    下载试用了,很不错。
    试用的感受:
    首页的输入框可以加一个说明性的文字,我直接写 `ssh [email protected]` 按回车没反应,应该是我的用法不对。
    proxy 功能 12 星好评
    希望可以自定义配置文件的路径,这样就可以用 one drive 同步配置文件了。
    powersee
        56
    powersee  
    OP
       17 天前 via iPhone
    @sn0wdr1am #51 我对这个协议很感兴趣,我会尝试实现的

    @w3cll #53 flatlaf


    @willgyw #54 感谢🙏


    @smilenceX #55 其实是可以的。打开 app 目录 有一个 termora.cfg 文件,在后面加个 -Dtermora.base-data-dir=目录

    https://github.com/TermoraDev/termora/blob/470b95cc426ce31e2d67c9e0f77e80154ac28aae/src/main/kotlin/app/termora/Application.kt#L69
    Remember
        57
    Remember  
       17 天前
    你这缺了太多功能,怎么敢直接 release 1.0.0 啊?

    不说没实现的 sftp/trzsz 那些,最基础的 key 认证也只支持 rsa ,另外也不支持任何 key agent 。

    只能是先 star 了。

    不过打开看了一下 win11 占用 300M 不到内存,这在 java 里很优秀了啊。
    powersee
        58
    powersee  
    OP
       17 天前 via iPhone
    @Remember #57 的确缺了很多功能,所以要慢慢完善嘛。因为我只测试了 rsa ,后面会扩展更多,另外,您说的 key agent 是指?
    Remember
        59
    Remember  
       17 天前   ❤️ 1
    @powersee ssh agent 。putty 的 pageant 或者 openssh 的 ssh-agent.
    willgyw
        60
    willgyw  
       17 天前
    还有一个小的需求,好像 item2 里面不需要任何插件就可以实现 tmux 和 vim 以及系统剪切板之间共享内容,请问这个功能可以实现吗?
    Lowae
        61
    Lowae  
       17 天前
    @powersee 不过好在 kmp 的迁入是可以做到渐进的,而且也不是重 UI 的项目
    我推荐个项目,看看能不能给你带来一些灵感。
    https://github.com/JakeWharton/mosaic
    macaodoll
        62
    macaodoll  
       17 天前 via Android
    插眼等更新
    windfalls
        63
    windfalls  
       17 天前
    R 门, 贫僧这就用 rust 给你重写😂
    caola
        64
    caola  
       17 天前   ❤️ 1
    xterminal 是我用过最好用的 SSH 工具了,但它是用 Electron 的,流畅度上一般,如果有可能的话,建议可以抄一下他们的功能和界面
    zhiyu1998
        65
    zhiyu1998  
       17 天前
    看着不错,已 star😁
    cheng6563
        66
    cheng6563  
       17 天前
    @powersee #37 看看 OpenJ9 的 Jvm 吧,省不少
    molezznet
        67
    molezznet  
       17 天前
    @windfalls rust 的坛子里有了,20M 内存占用。 不过还没开源
    Hconk
        68
    Hconk  
       17 天前 via iPhone
    列几个希望能有的,前面几个功能有了应该能日常使用了,如果比其他软件流畅那应该能吸引更多人切过去:
    1. SFTP/FTP/SCP 文件管理,trzsz
    2. 串口,串口自动登陆
    3. 快捷指令按钮,按钮命令分组
    4. x-server
    5. 支持 cmd/poweshell ,类似 clink 的命令提示,自动提示
    6. 代理,多层跳板
    7. log 记录
    8. 字符高亮,自定义主题
    9. 自定义插件
    Hconk
        69
    Hconk  
       17 天前 via iPhone   ❤️ 1
    可以参考参考 WindTerm 的功能
    windfalls
        70
    windfalls  
       17 天前
    @molezznet 我翻了翻是 tshell 那个吗
    sn0wdr1am
        71
    sn0wdr1am  
       17 天前
    终端主题,参考同行的。
    shewhen
        72
    shewhen  
       17 天前
    @qianchengv #41 pixpin
    shewhen
        73
    shewhen  
       17 天前
    @powersee #18 我丢,刚注意到 OP 名字,是不是 B 站同名 UP 主本人啊,之前一直关注来着,原来在忙着开发大杀器,我记得你还是我校友🤣🤣
    cowcomic
        74
    cowcomic  
       17 天前
    JAVA 的内存占用真的是硬伤,期待以后的 JVM 能优化这个

    功能上提供几个个人感受
    xshell 个人离不开的功能主要有下面几个
    1 ,和 xftp 联动
    2 ,目录同步,虽然比较简陋,但也够了
    3 ,屏幕搜索
    zhongjun96
        75
    zhongjun96  
       17 天前
    好像不支持要授权码的连接?
    molezznet
        76
    molezznet  
       17 天前
    @windfalls 对 是那个
    Greendays
        77
    Greendays  
       17 天前
    挺好看的。如果支持 SFTP ,我就用这个来替代现在的 Windterm 了
    Poko
        78
    Poko  
       17 天前
    用起来挺快的,颜值也不错,优先加入 SFTP 吧
    kalman03
        79
    kalman03  
       17 天前
    Kotlin + Swing 有点意思,新瓶装旧酒
    liuzhedash
        80
    liuzhedash  
       17 天前
    看了下挺好的,star 了。
    不过现在用 xshell ,暂时不打算真用 lz 的,JAVA 再怎么说也比 electron 省资源。
    ripperdev
        81
    ripperdev  
       17 天前
    在 mac 上试用了下,启动挺慢的,比使用 Electron 的 Tabby 还要慢。习惯性的用 ctrl+d 退出当前终端时,tab 没有关闭,得手动点一下
    powersee
        82
    powersee  
    OP
       17 天前
    @ripperdev #81 速度似乎都卡在了 “setupLaf” 这里,后续我会研究一下如何提升一下这个速度


    @Greendays #77 这个 SFTP/FTP 是优先项,我会尽快支持


    @cowcomic #74 请问 “屏幕搜索” 是什么意思?
    liyanggyang
        83
    liyanggyang  
       17 天前
    大佬,有个疑问想请教下,您是如何判断 linux 命令已经直接完毕的,然后返回渲染?

    我之前在网上找了些方案:
    一、看 io 输入是否还有, 弊端:1 、有时候网络波动,io 没有输入但是命令还没返回完; 2 、类似 sleep 10 echo 1 这种命令,10 秒内 io 没返回直接 return 了不行
    二、根据换行后的 #、$ 等标识( 比如 [root@localhost ~]# ) ,弊端:不够优雅,而且如果是 cat xxx.txt ,xxx.txt 文本中有 # 等在末尾,恰好有可能碰撞到返回
    三、 用户输入命令自行拼接,比如 输入 ls , 变为 ls , echo end , 根据 返回 end 判断。弊端 :不够优雅,且有同样“二”问题
    等等
    NowTime
        84
    NowTime  
       17 天前
    @powersee 感觉我经常使用的一些快捷键似乎在这个软件失效了,比如:
    - `Ctrl + W` 删除光标前一个单词,结果是关闭终端且没有任何提示 😂
    - `Ctrl + 左右方向键` 光标跳跃单词移动
    ...
    lyp92nlf
        85
    lyp92nlf  
       17 天前
    SSH client is opening...
    SSH client opened successfully.
    Session established.
    Session created.

    通过代理连接主机会在这里卡 15 秒左右, 其它的还不错,正常连接挺快的,希望可以自定义字体,不然中文不太协调
    powersee
        86
    powersee  
    OP
       17 天前
    @liyanggyang #83 pty 可以理解为是网络流,它是无边的。终端只负责渲染和输入,并不是涉及到 “执行” ,执行命令是由底层的 zsh/bash/sh 来操作的。我们无法获取到用户输入的命令,这个正是我有疑虑的地方,如果无法准确的获取到用户输入的命令是没办法做到 “命令提示” 的。


    @NowTime #84 是的,这些快捷键还没有实现,和 #83 的回答一样,目前我还没有好的思路如何获取用户输入的命令。
    powersee
        87
    powersee  
    OP
       17 天前
    @willgyw #60 “vim 以及系统剪切板之间共享内容” 可以提个 https://github.com/TermoraDev/termora/issues/new 详细描述一下嘛?
    Lunrry
        88
    Lunrry  
       16 天前
    请问和 Windterm 相比有什么优势呢
    lloveinmypacket
        89
    lloveinmypacket  
       16 天前
    @powersee 可以做一个假的输入 UI 给用户,各种提示都可以实现,最后再给底层执行
    blankmiss
        90
    blankmiss  
       16 天前
    有点像 termius 不过 java 内存占用不大吗
    zoharSoul
        91
    zoharSoul  
       16 天前
    不错啊 挺漂亮的
    zhongjun96
        92
    zhongjun96  
       16 天前
    常用的快捷键 Ctrl+D 关闭当前窗口,Ctrl+N 新增窗口
    没实现
    zeusho871
        93
    zeusho871  
       16 天前
    干翻 FinalShell 那个玩意儿很反人类 多窗口在 mac 里 轻轻一拖就多了
    adoal
        94
    adoal  
       16 天前
    @powersee 关键词 OSC52
    monkeyWie
        95
    monkeyWie  
       16 天前 via Android
    为啥不直接上 flutter 呢
    molezznet
        96
    molezznet  
       16 天前
    发现没有 import ? export 完, 不知道如何使用 json 了
    lululau
        97
    lululau  
       16 天前
    这两年程序员都跟 Terminal 软件干上了?反正不管什么 Warp / wezterm / ghostty ,我觉得还是 iTerm2 功能最强大
    powersee
        98
    powersee  
    OP
       16 天前 via iPhone
    @lloveinmypacket #89 似乎是个不错的方案,有案例吗?


    @zhongjun96 ctrl+w 可以关闭



    @molezznet #96 还没有导入功能…
    lvrvfv
        99
    lvrvfv  
       16 天前
    支持,最近刚用 kmp 开发了一个客户端,向楼主学习
    liuliuliuliu
        100
    liuliuliuliu  
       16 天前
    我觉得可以试试用 .net 写,aot 编译,跨平台还不需要运行时,内存占用也小
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3529 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 05:01 · PVG 13:01 · LAX 21:01 · JFK 00:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.