Windows10下的WSL的使用和ssh配置

Windows Subsystem for Linux

Posted by dulunar on October 14, 2019 | 访问量:

WSL介绍

WSL(Windows Subsystem on Linux),适用于 Windows 的 Linux 子系统,是微软和Canonical(Ubuntu 的母公司)共同开发的,在Windows 10后加入的功能,能够在Windows 10 系统中挂载一个Linux 系统,用起来不像虚拟机那样臃肿、开机缓慢、性能低下,是Windows使用者用来进阶使用Linux系统的一个不错的选择,开发人员可在其上运行GNU/Linux环境(包括大多数命令行工具、实用程序和应用程序)。

WSL的安装

第一步:启用虚拟机平台和 Linux 子系统功能

确保你的windows10系统的内部版本高于或等于16215 (来自官网提示); 在win10的win图标处,右键->管理员权限启动 PowerShell (或者win+r–>PowerShell–>ctrl+shift+enter),出现PowerShell的命令行界面后,接着输入以下命令启用虚拟机平台:

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

命令运行后,等待一段时间,会出现如下结果,代表虚拟平台已经开启:

Running
[ooooooooooooooo                        ]
Path          :
Online        : True
RestartNeeded : False

虚拟平台开启后,接着在命令行中输入以下命令开始Linux子系统:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

和开启虚拟平台有一些区别,命令运行结束后,命令行会出现是否重启的界面:

Running
[ooooooooooooooo                        ]
是否立即重启计算机以完成此操作?
[Y] Yes  [N] No  [?] 帮助 (默认值为“Y”): n
Path          :
Online        : True
RestartNeeded : True

当然,上述windows 10的功能的开启也可以通过启用或者关闭windows功能来启用: win搜索–>控制面板–>程序–>卸载程序–>启用或者关闭 Windows 功能–>勾选虚拟机平台和适用于 Linux 的 Windows 子系统: 启用Windows功能

完成设置后,记得重启计算机!

第二步:选择一个 Linux 发行版进行安装

windows打开微软应用商店(store),在搜索框中输入Linux进行搜索,在搜索结果中有很多Linux发行版可以选择,开始你的选择,获取该发行版,然后安装: Linux发行版 选择Ubuntu系统 在这里需要注意,在store中的安装并没有实际上完成 Linux 子系统的安装,还需要运行一次已安装的 Linux 发行版,这样才会完成真正的安装: 完成WSL的安装

一般不愿意折腾的都推荐使用这种方法安装Linux发行版,但是官方也考虑到了其他的情况,如无法(或不想)通过 Microsoft Store 安装 WSL Linux 发行版、可能运行的是不支持 Microsoft Store、系统环境中不允许 Microsoft Store 使用的 Windows Server 等等,当出现以下情况时,可以通过如下的方法下载和安装:

手动下载适用于 Linux 的 Windows 子系统发行版包

有时候,你可能无法(或不想)通过 Microsoft Store 安装 WSL Linux 发行版,比如说,你运行的可能不支持 Microsoft Store 或公司网络策略和/或管理员在你的环境中不允许 Microsoft Store 使用的 Windows Server 或长期服务(LTSC)桌面操作系统 SKU。 在这些情况下,虽然 WSL 本身可用,但如果你无法访问应用商店,如何下载并在 WSL 中安装 Linux 发行版?

浏览器下载发行版

如果 Microsoft Store 应用不可用,则可以在浏览器中通过单击以下链接下载并手动安装 Linux 发行版: Ubuntu 18.04 Ubuntu 18.04 ARM Ubuntu 16.04 Debian GNU/Linux Kali Linux OpenSUSE Leap 42 SUSE Linux Enterprise Server 12 WSL 的 Fedora Remix 点击链接后,可以下载CanonicalGroupLimited.Ubuntu18.04onWindows_1804.2018.817.0_x64__79rhkp1fndgsc.Appx这样的以.appx为后缀的包到浏览器下载文件夹,然后按照下面的安装说明安装下载的发行版。

命令行下载发行版

使用 PowerShell WebRequest下载

下载发行版,也可以通过windows的命令行工具——PowerShell来操作,命令提示符是Invoke-WebRequest,如下是下载示例:

cd C:\Users\dulun\Downloads
Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1804 -OutFile Ubuntu-1804.appx -UseBasicParsing

来自官方的提示:下载开始的时候可以看到一个进度条,如果预估下载的时间比较长,请通过设置$ProgressPreference = 'SilentlyContinue'来关闭进度栏

使用 PowerShell curl.exe 下载

Windows 10 春季2018更新(或更高版本)包含可从命令行调用 web 请求(例如 HTTP GET、POST、PUT 等命令)的常用命令行工具——curl.exe,名字是客户端(client)的 URL 工具的意思。使用curl.exe下载的示例:

curl.exe -L -o Ubuntu-1804.appx https://aka.ms/wsl-ubuntu-1804
安装下载的Linux发行版

在Windows10系统中,使用PowerShell安装已下载的Linux 发行版,但是需要进入到下载的文件的目录,运行Add-AppxPackage \.app_name.appx,示例:

cd C:\Users\dulun\Downloads
Add-AppxPackage Ubuntu-1804.appx

Windows Server安装WSL

但是有些用户使用的是Windows Server的系统,这和Windows10的安装有一些区别,前面的开启受信用的执行环境是一样的,启用虚拟机平台和适用于 Linux 的 Windows 子系统,然后重启计算机,必须重启。然后按照上面的链接、下载方式选择合适Linux 发行版、下载。

Windows Server提取并安装 Linux 发行版

下载发行版后,请提取其内容,并手动安装发行版,使用PowerShell提取下载的<distro>.appx包的内容:

Rename-Item .\Ubuntu-1804.appx .\Ubuntu.zip
Expand-Archive .\Ubuntu.zip .\Ubuntu
cd .\Ubuntu && ls  ##进入Ubuntu目录并查看包含的文件

Ubuntu文件

在名为Ubuntu的目标文件夹中运行Linux 发行版启动器应用程序ubuntu1804.exe以完成安装:

.\ubuntu1804.exe

第三步:初始化、查看和使用 WSL

初始化安装Linux发行版

新安装完WSL后,首次运行新安装的分发版,会打开一个控制台窗口,其中指出需要等待一两分钟时间来完成安装:

这一步是最后的安装阶段,Linux发行版的文件将会被解压缩,然后储存到电脑上供使用,时间的长短取决于电脑存储设备的性能,这一步也只是当Linuxf发行版是初始安装的版本时,才需要执行初始化安装——这也是为什么后期WSL的启动飞速的原因。

初始话安装结束后,系统提示创建新的用户帐户及其密码: 完成WSL的安装

此用户帐户用于启动Linux 发行版时默认登录的非管理员用户。

可根据需要选择任何用户名和密码 - 它们与 Windows 用户名无关。打开此Linux子系统时,系统不需要输入密码,但是如果使用sudo权限的时候,这需要输入密码,所以密码还是需要记住的。

在windows中查看安装的WSL

PowerShell中使用 wsl -l 可以列出当前系统上已经安装的 Linux 子系统名称。注意这里的 -l 是列表list的缩写,是字母l不是其他字符。 查看WSL

如果运行命令的时候,提示 wsl不是内部或外部命令,说明你第一步的“适用于 Windows 的 Linux 子系统”没有设置完整,请先完成第一步。

如果提示没有发现任何已安装的 Linux子系统,说明你没有安装 Linux 发行版,或者只是从商店或者浏览器下载了,没有运行它执行真正的安装,请先完成本文第二步。

在这里如果直接在PowerShell中输入wsl,也可以直接进入安装的Linux子系统。

WSL的配置ssh的开机自启动

因为我是在Workstation上安装的WSL,本意是取代原先使用的虚拟机,这里说一下为什么舍弃了虚拟机,我刚开始使用的是VirtualBox,这个软件吧我第一次使用,KI‘s IT部门推荐的,但是除了安装完第一次以后,我就再也没有打开过,IT小哥也不知道怎么办,我只能转投了VMware,这不是我第一次使用了,刚来KI的时候,因为条件艰苦,我使用了办公室老机器打了一个虚拟机用来搭建流程,但是用的只能说还行,毕竟只是前期搭建。 后来新机器来了以后,因为网络驱动器(俗称存储Server)的存在,我没有办法安装Ubuntu,只能先安装KI的windows 10,然后使用实验室博后的账号登录,Server才会出现(人家有access的)。VMware在KI的Software Center居然下不到,想尽了办法安装好,体验了5天左右,缺点出来了,我配的服务器的内存是256g,但是VMware的max memory是64g;机器配了两个cpu,共40个核,但是VMware的max processor数是16,这导致我配置的机器大部分性能根本没法发挥出来,于是我转身就投身了WSL的怀抱,配置起来也是各种奇葩,因为KI安装软件的各种限制。 既然是服务器的使用,肯定需要用到SSH的配置,因为我一般是使用自己的电脑用putty、xshell等软件连接服务器的,但是WSL的ssh不是安装好久开机自启动,需要设置,接下来简单说一下我的设置。

Ubuntu 启用SSH所需设置
#设置root的口令(密码),用作后续登陆使用
sudo passwd root

#安装openssh-server(ubuntu自带已安装,但是我使用有问题,没找到原因)
sudo apt remove openssh-server
sudo apt install openssh-client openssh-server

#备份原始的sshd_config
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo cp /etc/ssh/ssh_config /etc/ssh/ssh_config.bak

#使用vim进行编辑,按i进入insert模式
sudo vim /etc/ssh/sshd_config

在vim中找到对应项并修改,ESC,输入`wq`保存退出:
Port 2222
ListenAddress 0.0.0.0        # 如果需要指定监听的IP则去除最左侧的井号,并配置对应IP,默认即监听PC所有IP
PermitRootLogin no           # 如果你需要用 root 直接登录系统则此处改为 yes
PasswordAuthentication yes    # 将 no 改为 yes 表示使用帐号密码方式登录

#使用vim进行编辑,按i进入insert模式
sudo vim /etc/ssh/ssh_config

#在vim中找到对应项并修改,ESC,输入`wq`保存退出:
Port 2222
ListenAddress 0.0.0.0        # 如果需要指定监听的IP则去除最左侧的井号,并配置对应IP,默认即监听PC所有IP

#启动ssh,查看status
sudo service ssh start             #启动SSH服务
sudo service ssh status            #检查状态
sudo systemctl enable ssh          #开机自动启动ssh命令,我好想失效了
WSL开机自启动SSH

因为我使用systemctl这个失效了,所以就另想办法开机自启动ssh;

Ubuntu 系统添加启动:

##登录帐号就会启动,写入到bash中
sed -i '/^sudo service ssh --full-restart/ d' ~/.bashrc

##使用sudo开机自启动
echo -e "%sudo\tALL=(ALL) NOPASSWD: /usr/sbin/service ssh --full-restart" | sudo tee -a /etc/sudoers

##检测ssh的状态,也是写入到bash中
cat << 'EOF' >> ~/.bashrc
sshd_status=$(service ssh status)
if [[ $sshd_status = *"is not running"* ]]; then
  sudo service ssh --full-restart
fi
EOF

如果大家觉得麻烦,可以使用这个自动安装和配置的脚本,我修改了一下,大家用之前可以看一下大概,这里也会安装一下基础的安装包。

Windows启用SSH端口所需设置

因为在前面设置的ssh端口是2222,22端口在Windows下有其他占用了,所以还需要去防火墙中设置一下这个端口的拨入,win+防火墙,进入防火墙页面,按如下操作: 设置防火墙

端口–>TCP–>特点本地端口2222–>允许连接–>下一步确定;设置完成。

Windows 系统添加自动启动

在ubuntu中添加一个脚本程序,详情如下:

sudo vi /etc/init.wsl
#!/bin/sh
# Filename: /etc/init.wsl
# Usage: sudo /etc/init.wsl [start|stop|restart]
/etc/init.d/ssh $1
/etc/init.d/cron $1
/usr/sbin/rstudio-server $1
mount -t drvfs 'P:\PHA' /mnt/shareP

Windows 中添加自动启动的脚本 startubuntu.vbs; a. 打开当前用户默认自启动加载文件夹,在 Windows 中,开始-运行(或者win+r),输入:shell:startup

b. 在当前用户默认自启动加载文件夹中,添加要加载的VBS脚本文件 startubuntu.vbs 。

Set ws = WScript.CreateObject("WScript.Shell")
ws.run "wsl -d ubuntu -u root /usr/sbin/service ssh --full-restart", vbhide
ws.run "ubuntu run sudo /etc/init.wsl start", vbhide

重启 Windows 系统,验证WSL ssh服务是否自动启动。

至此,我这段时间的折腾就在这里了,还有些有的没的也就没写了,服务器配置好了,还需要去把流程什么的迁移过来,后期再写写WSL中挂在硬盘、移动硬盘、网络驱动器等等再说吧!

References

如何在 Windows 10 中安装 WSL2 的 Linux 子系统

WSL 服务自动启动

在Windows上舒适地使用Linux子系统(一):WSL的安装及配置

						—— dulunar 后记于 2019.10