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

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

  •  4
     
  •   powersee · 2 天前 · 4489 次点击

    为什么要做这个?

    目前市面上大多数客户端都是基于 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

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

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

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

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

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

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

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

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

    #26 后续加上

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

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

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

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

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

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

    只能是先 star 了。

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

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


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


    @cowcomic #74 请问 “屏幕搜索” 是什么意思?
    liyanggyang
        83
    liyanggyang  
       1 天前
    大佬,有个疑问想请教下,您是如何判断 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  
       1 天前
    @powersee 感觉我经常使用的一些快捷键似乎在这个软件失效了,比如:
    - `Ctrl + W` 删除光标前一个单词,结果是关闭终端且没有任何提示 😂
    - `Ctrl + 左右方向键` 光标跳跃单词移动
    ...
    lyp92nlf
        85
    lyp92nlf  
       1 天前
    SSH client is opening...
    SSH client opened successfully.
    Session established.
    Session created.

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


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


    @zhongjun96 ctrl+w 可以关闭



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