powersee
V2EX  ›  分享创造

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

By powersee at 2025 年 1 月 2 日 · 14394 次点击

为什么要做这个?

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

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

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

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

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

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

感觉很流畅
liansishen
   15
liansishen  
   2025 年 1 月 2 日
star 了,等后续更新
iyiluo
   16
iyiluo  
   2025 年 1 月 2 日
ssh 客户端加 ai 功能感觉挺离谱的,这不是把命令隐私都泄露了吗,没必要。ftp 的功能反倒优先级更高
shewhen
   17
shewhen  
   2025 年 1 月 2 日   ❤️ 1
期待加入 SFTP ,干翻 Termius ,FinalShell ,XShell !✨✨✨
powersee
   18
powersee  
OP
   2025 年 1 月 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
   2025 年 1 月 2 日
@iyiluo #16 是这样,我觉得 AI 比较鸡肋,我个人是比较反对的,后续我会考虑如何以 “方便、效率、易用” 的方面来接入 AI 。我比较倾向于: https://plugins.jetbrains.com/plugin/14823-full-line-code-completion 这种,完全本地化运行,但是我没有这方面的经验
lozzow
   20
lozzow  
   2025 年 1 月 2 日
希望加入 Quake Mode
powersee
   21
powersee  
OP
   2025 年 1 月 2 日
@lozzow #20 “Quake Mode” 是什么?我没了解过,有相关文档吗?🤣
thetbw
   22
thetbw  
   2025 年 1 月 2 日   ❤️ 1
java 之光
molezznet
   23
molezznet  
   2025 年 1 月 2 日
先 star 再试用
比起 ai 什么, 还是期待 trzsz 之类或 sftp 之类的优先级
powersee
   24
powersee  
OP
   2025 年 1 月 2 日
@molezznet #23 是的。我把 AI 排的比较靠后
ZeroDu
   25
ZeroDu  
   2025 年 1 月 2 日
win 测试了一下不错,丝滑,比用 Electron 的好多了 ,终端用来用去还是 xshell 顺手,功能全。不过 Termius 的这种 ui 其实还可以的
ZeroDu
   26
ZeroDu  
   2025 年 1 月 2 日
@ZeroDu #25 主页,选择主机,回车没有加事件吗
ZeroDu
   27
ZeroDu  
   2025 年 1 月 2 日
@ZeroDu #25 快捷键应该需要完善一下
molezznet
   28
molezznet  
   2025 年 1 月 2 日
@ZeroDu 启动有优势, 不过内存占用没优势
ZeroDu
   29
ZeroDu  
   2025 年 1 月 2 日
@molezznet #28 这个确实是,java 系的东西往往性能不差,就是内存占用这个是真的大
KagurazakaNyaa
   30
KagurazakaNyaa  
   2025 年 1 月 2 日
似乎没有支持 24 位深度色彩(TrueColor)终端,使用 btop 的 truecolor 模式会渲染出错,就像 xshell 一样,应该是只做了 256 色支持
powersee
   31
powersee  
OP
   2025 年 1 月 2 日
@ZeroDu #25 不可否认的是 在 Windows 上 XShell 是不二之选,毕竟发展了十几年了。

#26 后续加上

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

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

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

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

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

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

只能是先 star 了。

不过打开看了一下 win11 占用 300M 不到内存,这在 java 里很优秀了啊。
powersee
   58
powersee  
OP
   2025 年 1 月 2 日 via iPhone
@Remember #57 的确缺了很多功能,所以要慢慢完善嘛。因为我只测试了 rsa ,后面会扩展更多,另外,您说的 key agent 是指?
Remember
   59
Remember  
   2025 年 1 月 2 日   ❤️ 1
@powersee ssh agent 。putty 的 pageant 或者 openssh 的 ssh-agent.
willgyw
   60
willgyw  
   2025 年 1 月 2 日
还有一个小的需求,好像 item2 里面不需要任何插件就可以实现 tmux 和 vim 以及系统剪切板之间共享内容,请问这个功能可以实现吗?
Lowae
   61
Lowae  
   2025 年 1 月 2 日
@powersee 不过好在 kmp 的迁入是可以做到渐进的,而且也不是重 UI 的项目
我推荐个项目,看看能不能给你带来一些灵感。
https://github.com/JakeWharton/mosaic
macaodoll
   62
macaodoll  
   2025 年 1 月 2 日 via Android
插眼等更新
windfalls
   63
windfalls  
   2025 年 1 月 2 日
R 门, 贫僧这就用 rust 给你重写😂
caola
   64
caola  
   2025 年 1 月 2 日   ❤️ 1
xterminal 是我用过最好用的 SSH 工具了,但它是用 Electron 的,流畅度上一般,如果有可能的话,建议可以抄一下他们的功能和界面
zhiyu1998
   65
zhiyu1998  
   2025 年 1 月 2 日
看着不错,已 star😁
cheng6563
   66
cheng6563  
   2025 年 1 月 2 日
@powersee #37 看看 OpenJ9 的 Jvm 吧,省不少
molezznet
   67
molezznet  
   2025 年 1 月 2 日
@windfalls rust 的坛子里有了,20M 内存占用。 不过还没开源
Hconk
   68
Hconk  
   2025 年 1 月 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  
   2025 年 1 月 2 日 via iPhone   ❤️ 1
可以参考参考 WindTerm 的功能
windfalls
   70
windfalls  
   2025 年 1 月 2 日
@molezznet 我翻了翻是 tshell 那个吗
sn0wdr1am
   71
sn0wdr1am  
   2025 年 1 月 3 日
终端主题,参考同行的。
shewhen
   72
shewhen  
   2025 年 1 月 3 日
@qianchengv #41 pixpin
shewhen
   73
shewhen  
   2025 年 1 月 3 日
@powersee #18 我丢,刚注意到 OP 名字,是不是 B 站同名 UP 主本人啊,之前一直关注来着,原来在忙着开发大杀器,我记得你还是我校友🤣🤣
cowcomic
   74
cowcomic  
   2025 年 1 月 3 日
JAVA 的内存占用真的是硬伤,期待以后的 JVM 能优化这个

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


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


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

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


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


@zhongjun96 ctrl+w 可以关闭



@molezznet #96 还没有导入功能…
lvrvfv
   99
lvrvfv  
   2025 年 1 月 3 日
支持,最近刚用 kmp 开发了一个客户端,向楼主学习
liuliuliuliu
   100
liuliuliuliu  
   2025 年 1 月 4 日
我觉得可以试试用 .net 写,aot 编译,跨平台还不需要运行时,内存占用也小
第 1 页
共 2 页
12
爱意满满的作品展示区。
© 2026 V2EX · 313ms · 3.9.8.5