美文网首页生物信息WSL
Windows10下的WSL的使用和ssh配置

Windows10下的WSL的使用和ssh配置

作者: dulunar | 来源:发表于2020-09-01 09:17 被阅读0次

    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/sshd_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

    相关文章

      网友评论

        本文标题:Windows10下的WSL的使用和ssh配置

        本文链接:https://www.haomeiwen.com/subject/xzvmsktx.html