造了个启动 WSL 里的 sshd 的小东西

2019-06-02 19:38:42 +08:00
 RedL0tus

因为一些不可抗的原因,我这段时间在用 Windows。但是在这之前我已经有半年左右没用过 Windows 了,离开了 Linux 下的那些工具可以说是浑身难受。而且最近这段时间刚刚配了一下 tmux 之类的东西感觉挺好。到了 Windows 下可真算是这也没有那也没有了。

于是装了 openSUSE 和 Arch 两个 WSL(Windows Subsystem Linux) 发行版。装完并设置好自己的 dotfiles 之后用了一段时间才发现 Windows 下根本就没一个好用的终端模拟器:

并且 vim 在这些终端模拟器里基本就是不能使用(尤其是配色上面)。这些问题据说是 ConHost 的限制,他们做终端模拟器的人也没办法。

前段时间巨硬的 Build 大会上公布了 Windows Terminal,我也去他们的 CI 上面下了一个 Dev 构建然后试了下,发现:

这时候又看到说我们可以用 SSH,毕竟 Windows 下还是有不少还算好用的 SSH 客户端的嘛。可是这个方法也不是很完美。一是 WSL 里没有真正意义上的 init,像 Arch 这样只有纯 systemd 的发行版无法通过它自动启动 sshd ;二是就算能用 RC 脚本启动 sshd (比如 Ubuntu ),也还是需要用户操作,相对麻烦。

然后我就想造一个东西能启动 WSL 里面的 sshd,网上稍微搜了下好像也没有同类程序。我就自己下载了 Visual Studio 试着写了一个。

其实本来想做成 UWP 的但是试了一下发现完全没头绪,最后用了 WPF。我总共就没做过几个图形程序,希望大佬们轻点。

现在基本功能在我这边测试是能用了(可以列出发行版,可以启动 sshd,可以开机自动启动),但是还是很不完善:

但是它至少能用了嘛!

源码: https://github.com/RedL0tus/WSL_SSH_Launcher

4468 次点击
所在节点    Windows
21 条回复
EricXuu
2019-06-02 19:49:57 +08:00
好厉害!但是加个计划任务不就好了。。
详细可以参考
我爱命令行 - WSL 服务自动启动的正确方法
https://zhuanlan.zhihu.com/p/47733615
goreliu
2019-06-02 19:52:12 +08:00
可以试试 wsltty,颜色、鼠标、vim 和 tmux 支持都正常,本地使用的话没太大必要用 ssh。另外把 wsl 的路径从防病毒软件扫描路径排除就没有 Antimalware cpu 占用了。
RedL0tus
2019-06-02 19:53:17 +08:00
@EricXuu 看了下,这还是需要一个手动启动 WSL 的过程吧,我比较懒(小声
RedL0tus
2019-06-02 20:00:18 +08:00
@goreliu 刚试了一下,颜色还是不对 😂
这个是 ConHost 的问题的样子,没办法的吧 😂

等 Windows Terminal 正式发布的时候我这东西应该就可以退休了(小声
lhx2008
2019-06-02 20:04:28 +08:00
不错,wsl 里面的 ubuntu 好像用 service sshd start 就可以,就是自启动还要写一个脚本

我要用 Docker, 还是虚拟机 + SSH 省心。WSL 就配合 Clion 编译下程序
iyaozhen
2019-06-02 20:31:14 +08:00
我是写了个 run_wsl.vbs ,防止启动文件夹下
set ws=wscript.createobject("wscript.shell")
ws.run "C:\Windows\System32\bash.exe -c 'sudo /usr/sbin/service ssh restart'",0

《 Windows 10 生产力提升之 WSL 实践》 https://iyaozhen.com/windows10-wsl-ubuntu.html

“现在无法只停止 sshd 服务,只能杀死所有同个发行版的 WSL instance ” 不知道有没有记错,好像现在版本 WSL 只启动一个实例,直接 ssh 上去然后 sudo service ssh stop ?
RedL0tus
2019-06-02 20:40:25 +08:00
@iyaozhen 我是用 Arch WSL 测试的,它没有 RC 脚本所以用不了 service ;程序里启动在前台的 sshd 再启动一个 WSL 进程就看不到了,应该是隔离到了另一个 instance 里,所以我现在是这么做的... 我这里是 1903,具体我也不清楚了。
Nasei
2019-06-02 21:38:13 +08:00
@RedL0tus 是说开两个窗口的话,一个窗口中进程,另外一个没办法通过 ps - a 之类的看到吗?
RedL0tus
2019-06-02 21:51:24 +08:00
@Nasei 至少我测试出来是这样的 😂
都是独立的 WSL instance,ps 列不出别的 instance 的进程自然也无法操作(
Himingway
2019-06-02 23:38:17 +08:00


好像能 kill 掉
mxalbert1996
2019-06-02 23:46:23 +08:00
wsl-terminal 试过了吗?
NSAgold
2019-06-03 02:18:43 +08:00
@RedL0tus #3 楼上#1 那个应该不用手动启动 wsl 了。因为用 vbs 脚本启动了。
也可以把 vbs 的快捷方式拖进开始菜单的启动文件夹里(藏挺深,和 wsl 的目录差不多深)
(我之前做法也是写了个 vbs 脚本无窗口启动 不过是调用 bash 启动 wsl 里的其他程序。)
glouhao
2019-06-03 07:41:48 +08:00
搭车问下 学习 python 爬虫,放 wsl 里效率咋样,比直接放 win10 如何?
RedL0tus
2019-06-03 10:54:22 +08:00
@Himingway 诶... 我这里之前测试的时候不行... 现在突然又行了 🤣
RedL0tus
2019-06-03 10:55:33 +08:00
@NSAgold 嘛... 我写都写出来了(
lqh0126
2019-06-03 15:40:46 +08:00
楼主试一下 VSCode 里的 Terminal ?
RedL0tus
2019-06-04 09:30:57 +08:00
@lqh0126 那个在 Linux 下都不是很好用...
BUYI
2019-06-05 17:25:17 +08:00
Moba xterm 可以直接打开 WSL 终端(当然它也可以打开 cmd.exe powershell 等等) Session 管理也很好
RedL0tus
2019-06-06 10:18:44 +08:00
@BUYI 免费的限制 tab 数量啊... 专业版有点贵。我已经卖了 Token2Shell 了非常心疼钱 🤣🤣🤣
RedL0tus
2019-06-06 10:18:59 +08:00
@RedL0tus 已经买了*

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/570069

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX