在Windows系统下使用mosh
最近购买了一个海外的VPS,操作的时候发现ssh卡出了翔,完全无法使用。无奈之下转用mosh试试运气。由于我平时只用Windows系统,而mosh官方并没有原生的客户端,要么是Chrome插件,要么是基于Cygwin的版本且有兼容性问题。还有一个选择是在WSL里面使用mosh…😣
Chrome插件无法安装,不知是Edge问题还是Google的问题。
无奈寻找了一番,发现一款开源的Terminal模拟器FluentTerminal提供了在Windows下使用mosh的能力。本人平时用Windows Terminal,于是乎研究了下它的实现原理,发现它居然内置了一款编译好的mosh-client.exe。虽然是4年前的版本,但总归是聊胜于无。
有了mosh-client.exe,但是启动mosh的过程缺异常繁琐😢:要先ssh到远端的机器上将mosh-server启动起来,拿到端口和MOSH_KEY,再回到本机将mosh-client启动起来,启动的时候还不能使用ssh_config里配置的别名,只能用IP或域名🤮。有需要写一段程序将这个过程自动化起来😀。
之后只需要敲命令:mosh s002 就可以登录到2号VPS上了。
后来我发现Linux版本的mosh文件居然是一个perl脚本,mosh-client和mosh-server是二进制产物。而Git for Windows下面居然带了个perl……
#!/usr/bin/perl
# Mosh: the mobile shell
# Copyright 2012 Keith Winstein
于是乎,就将Linux的这个脚本直接拿过来用了……上面的Python脚本算是白写了。
拿过来发现了一个小问题,就是mosh里面的颜色不如用Python脚本时丰富,只有几种颜色。研发发现其mosh-server端命令指定的颜色数为0……
# 正常情况颜色数为256
mosh-server new -c 256 -s -l LANG=zh_CN.UTF-8
# 异常情况颜色数为0
mosh-server new -c 0 -s -l LANG=zh_CN.UTF-8
于是看了眼perl代码,发现是获取颜色数的时候出现了问题。
由于我不懂perl,不知道啥问题,干脆直接把$colors=0改造$colors=256了。改为之后万事大吉~