WinSSH,一款跨平台SSH客户端

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

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

比如:

1. SFTP的操作,硬生生和SSH会话标签分开,这是最大不便。

2. 服务器的管理界面逻辑,很傻,我都设立分组了,为啥不能出个树形视图?

3. 还有端口转发,跟SFTP坐一桌

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


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

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

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

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

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


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

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

先来张图

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

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

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

相对丰富的右键菜单功能

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

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

端口转发

命令面板

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

Bash
__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的朋友应该很赞同这个功能~哈哈


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

## 最后

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

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

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

大佬们Star走起来!!!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注