[分享创造] [开源] WinSSH,一个跨平台 SSH 客户端

[分享创造] [开源] WinSSH,一个跨平台 SSH 客户端
[分享创造] [开源] WinSSH,一个跨平台 SSH 客户端

这个产品我花了大量时间打磨,并且已经完全用在了我日常的工作中

首先,我本身是 Termius 的长期订阅用户,Termius 带来跨端体验确实没得说,但就日常使用来看,很多操作都比较<不够直接>

比如:

  1. SFTP 的操作,硬生生和 SSH 会话标签分开,这是最大不便。
  2. 服务器的管理界面逻辑,很傻,我都设立分组了,为啥不能出个树形视图?
  3. 还有端口转发,跟 SFTP 坐一桌

Termius 订阅

总之,综合这些使用体验,我自己写了一个符合日常使用直觉的 SSH 客户端,它就是 WinSSH !


说来也是奇幻,早些年我技术还不够的时候就想做这样一款产品,名字也是叫 WinSSH ,甚至持有了 winssh.net 这个域名很长时间。

当时想的就做 Windows 客户端,最早一版用 C#+WPF 手搓出来的,但是问题太多,最主要的问题就是终端渲染。

当时我参考了一个叫 FluentTerminal 的开源项目,它是用 webview+xtermjs 解决终端渲染的问题,我第一版也是采用了类似的方案:CEF+xtermjs 。

最后整体完成了不到 30%,但是基本的 shell+sftp 操作是没有问题的,再后来就直接鸽了~

直到近几年 AI 彻底爆发,我又想到了 WinSSH ,我决定重新起航!


在过去的几个月里,我反复琢磨,要怎么去做?使用何种技术栈?怎么去设计交互界面?

最终选择了 electron+react+xtermjs+shadcn 这套成熟的体系,完成了跨平台桌面应用开发之旅!

先来张图

主界面

怎么样?是不是很眼熟?哈哈哈哈,没错,我采用了 vscode 的设计风格,完全扁平+多标签页的操作!

这里面我花了很多小心思在 SFTP 操作面板上

例如支持平铺视图和树形视图切换 1780623294245.png

相对丰富的右键菜单功能 1780623434523.png

支持拖拽文件/目录到终端 1780623510150.png

支持快捷跳转收藏/常用目录 1780623582514.png

端口转发 1780623761114.png

命令面板 1780623803138.png

历史命令记录这里使用了OSC 133扩展协议,所以连接 SSH 时会向服务器上传并注入脚本,脚本代码如下

__wsh_emit() { printf "\033]%s\033\134" "$1"; };
__wsh_b64() { printf "%s" "$1" | base64 | tr -d "\n"; };
if [ -n "$BASH_VERSION" ]; then
  __wsh_state=A;
  __wsh_pre() {
    [ -n "$COMP_LINE" ] && return;
    [ "$__wsh_state" = "C" ] && return;
    __wsh_emit "633;E;$(__wsh_b64 "$BASH_COMMAND")";
    __wsh_emit "133;C";
    __wsh_state=C;
  };
  __wsh_post() {
    __wsh_ec=$?;
    [ "$__wsh_state" = "C" ] && __wsh_emit "133;D;$__wsh_ec";
    __wsh_emit "133;P;Cwd=$PWD";
    __wsh_emit "133;A";
    __wsh_state=A;
  };
  trap "__wsh_pre" DEBUG;
  PROMPT_COMMAND="__wsh_post${PROMPT_COMMAND:+;$PROMPT_COMMAND}";
elif [ -n "$ZSH_VERSION" ]; then
  __wsh_pre() {
    __wsh_emit "633;E;$(__wsh_b64 "$1")";
    __wsh_emit "133;C";
  };
  __wsh_post() {
    __wsh_ec=$?;
    __wsh_emit "133;D;$__wsh_ec";
    __wsh_emit "133;P;Cwd=$PWD";
    __wsh_emit "133;A";
  };
  autoload -Uz add-zsh-hook;
  add-zsh-hook preexec __wsh_pre;
  add-zsh-hook precmd __wsh_post;
fi

觉得别扭的可以在设置里进行全局关闭,或者在服务器编辑页面也可以关闭

以上举例的这些操作都是会话标签级别的,大幅提升了操作效率


提一点我觉得很 OK 的功能,那就是<离开安全提醒>!真的有用!

比如我开了多个 SSH 会话,其中有测试环境的、有生产环境的、有其他巴拉巴拉的

然后我在某个服务器下操作了一段时间后切其他软件工作了,这时候我在其他软件工作一段时间后再切回 WinSSH 的时候,如果不注意就直接操作可能会误操作服务器(就是忘了)

那么这时候,WinSSH 就会有一个覆盖整个软件的提醒,告知你当前激活的标签是哪台服务器

安全提醒

好用!这个提醒可以在设置里面开关设置离开时长阈值


然后是数据隐私问题,WinSSH 全面开源,没有任何上报服务器的行为!

支持自动备份和 webDAV 数据同步,喜欢完 NAS 的朋友应该很赞同这个功能~哈哈

1780624741364.png


其他的就是一些常规功能了,大家可以去探索一下

最后

Github: https://github.com/lantongxue/winssh

唯一官网: https://winssh.net

想不到吧,我又把域名买回来了(吐槽:net 域名贵了好多,新购 90 ,续费 95 )

大佬们 Star 走起来!!!

来源: v2ex查看原文