起因是这样:实验室有一台Windows10主机,配有3090显卡,我因为在分校,去实验室不现实,只能选择远程连接的方式,一开始使用的都是Teamviewer桌面连接工具,一是这样只能一个人来使用这台电脑,二来是发现有些深度学习的包在Win和Linux下不兼容,使用别人导出的配置文件在win上安装费劲,同时Microsoft又推出了WSL2,并且可以直连GPU,同时我又有一台闲置的公网服务器,索性搭建一个内网穿透,直接远程连接WSL2子系统,这样就同时解决了以上我的两个痛点。
WSL2的安装
微软官方有详细的教程,且为最新的,可以自行跳转:WSL安装
采用官网安装的一个问题就是,默认会安装到C盘,这样系统盘会越用越大,这些都是我一开始踩的坑,想通过打包迁移的方式转移到非C盘,麻烦且低效,后来直接删除,采用手动安装的方式:
启用适用于 Linux 的 Windows 子系统
管理员启动PowerShell并运行
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
版本号要求
- 对于 x64 系统:版本 1903 或更高版本,采用内部版本 18362 或更高版本。
- 对于 ARM64 系统:版本 2004 或更高版本,采用内部版本 19041 或更高版本。
- 低于 18362 的版本不支持 WSL 2。 使用 Windows Update 助手更新 Windows 版本。
启用虚拟机功能
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
然后重启电脑
下载Linux内核更新包
将 WSL 2 设置为默认版本
打开 PowerShell,然后在安装新的 Linux 发行版时运行以下命令,将 WSL 2 设置为默认版本:
wsl --set-default-version 2
安装Linux发行版本
这一步大部分是直接打开微软应用商店进行安装版本的,我们因为不想安装在C盘,所以手动下载安装包
- Ubuntu
- Ubuntu 20.04
- Ubuntu 20.04 ARM
- Ubuntu 18.04
- Ubuntu 18.04 ARM
- Ubuntu 16.04
- Debian GNU/Linux
- Kali Linux
- SUSE Linux Enterprise Server 12
- SUSE Linux Enterprise Server 15 SP2
- openSUSE Leap 15.2
- Fedora Remix for WSL
下载完成后,下载到非系统盘,使用进行安装相应的包
Add-AppxPackage .\app_name.appx
到这里WSL2的子系统就安装完成了,在Windows下可以通过Windows terminal上的“➕”直接启动WSL2-ubuntu,简单方便。
FRP安装
sshd服务安装
WSL2下的子系统安装的包非常的少,sshd服务是没有的,所以首先需要安装sshd服务
sudo apt update sudo apt install openssh-server
更改ssh的配置文件
vi /etc/ssh/sshd_config
改下面的这几个地方
Port = 22 # 去掉前面的#号 ListenAddress 0.0.0.0 #去掉前面的#号 PasswordAuthentication yes # 将 no 改为 yes 表示使用帐号密码方式登录
重启服务
sudo service restart ssh
同时最好是设置ssh服务为开机自启动(这里的开机是指wsl开机,不是windows开机)
WSL2这个系统好像是不能使用`systemctl`这个工具,所以我就直接写到.root/bashrc文件,这样就不用每次启动执行service restart ssh了
WSL2客户端frpc安装
查看当前Linux版本
uname -a
到对应的地址下载frp版本,下载地址
可以使用wget工具下载,并使用tar工具进行解压
wget https://github.com/fatedier/frp/releases/download/v0.41.0/frp_0.41.0_linux_amd64.tar.gz
tar -xzvf frp_0.41.0_linux_amd64.tar.gz
解压之后得到如下文件
执行frpc客户端程序启动服务
./frpc -c frpc.ini
关于frpc.ini配置文件的设置,后面等服务端配置完之后一并说明
到此,Windows上WSL2-ubuntu的frpc客户端就已经安装完毕了
frp服务端docker容器化安装
frp服务端的安装使用docker来完成,登录到https://hub.docker.com/,搜索frps,在tag里选择想要安装的版本,默认为最新版本
执行完镜像拉取的动作之后,设定启动
docker run -d \ --restart=unless-stopped \ -p 9999:9999 \ -p 8888:8888 \ -v /etc/frp/frps.ini:/etc/frp/frps.ini \ --name frps\ snowdreamtech/frps:0.40.0
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口,主机端口即你的公网服务器端口,这个有可能需要你到公网服务器提供商那里手动操作防火墙打开该端口号,比如我这里就是到我公网服务器防火墙上打开了9999端口和8888端口
- --volume , -v: 绑定一个卷,-v一般是指定主机与容器的目录映射,因为这里只需要一个ini文件的映射,所以只绑定文件即可,这就需要你首先在宿主机提前创建好这个文件,否则docker会提示你绑定文件夹。这里我就是在执行这条命令前到宿主机的/etc/frp/目录下touch了一个frps.ini文件。
frps的文件内容为
[common] bind_port = 9999
这里的设置一开始我弄的非常简单,就是设置了一个对外提供连接的bind_port,其实还可以添加身份认证信息等等,可玩性非常高。
对应的我的上一节的frpc.ini文件内容为
[common] server_addr = #你的公网服务器IP server_port =9999 http_proxy = #这个没啥用 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 # 开放22端口 remote_port = 8888 #你开的另一个端口,跟docker容器的端口对应上
连接22端口接管WSL2下ubuntu
- 启动Windows下frpc服务
frpc -c frpc.ini
- 启动docker 容器
- 启动你的任意一台可以访问互联网的电脑,通过ssh命令连接
ssh -p 8888 WSL的用户名@公网服务器IP
这里的8888是我的端口号,成功!
评论