WSL ssh 科学上网 远程windows主机同享ubuntu的好帮手

序言及需求

序言/动机

  实验室最近采购了四台每台包含一张4090显卡的主机。本想采购服务器,但公共机房的总功率饱和了,只能将显卡连同主机一起放在工位了。然而,没有了公共的服务器,我还是既想用Windows系统作为主机玩转office三件套和其他一些仅Windows有的软件又想用ubuntu写写shell,训训网络。这样只能频繁地开关机切换系统,以及拷贝数据。听闻师兄尝试了WSL(Windows Subsystem for Linux),可以在Windows系统上兼顾Ubuntu,自由地深度学习,于是也迫不及待得尝试了WSL。得益于微软的发展,如今的WSL已经非常方便与集成,不再是当年那个吴下阿蒙了。其实一行:

wsl --install 

就已经可以满足大半的诉求了,只不过其中还有些细节配置和原理,本文整理总结了一下。
  特此声明,我不是知识的生产者,而是知识的搬运工。

在这里插入图片描述

需求

  • WSL能检测到显卡(训网络)
  • WSL能科学上网(最好是,一些代码数据就不用拷贝了)
  • WSL能与主机交换数据(一些大数据集还是得物理复制上去)
  • WSL能被其它电脑ssh到(在宿舍用笔记本也能赶ddl)

从WSL官方文档开始

英文版文档:https://learn.microsoft.com/en-us/windows/wsl/

中文版文档:https://learn.microsoft.com/zh-cn/windows/wsl/

先进行Install和Tutorials的部分:
在这里插入图片描述
第一步:

wsl --install

重启生效,默认安装的是WSL2,ubuntu是22.04(目前最新稳定版)

进入cmd-打开Ubuntu
在这里插入图片描述

若发生报错 WslRegisterDistribution failed with error: 0x8004032d

在这里插入图片描述
需要进入windows控制面板-启动或关闭Windows功能,勾选适用于Linux的Windows子系统:
在这里插入图片描述
重启生效

再次进入就可以添加ubuntu的用户名和密码了

在这里插入图片描述
(localhost报错可以暂时不管,如果主机没有科学上网就没事)

若提示 wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理

背景:每次连接的时候会多次出现,甚至程序运行的时候也会有乱码。另外也许解决该问题可以让wsl也能科学上网。

参考CSDN: https://blog.csdn.net/weixin_62355896/article/details/134458330

关键问题是无法在【C:/User/%你的用户名】下找到.wslconfig 文件。

查阅官方文档https://learn.microsoft.com/zh-cn/windows/wsl/wsl-config发现:

• 默认情况下,.wslconfig 文件不存在。 它必须创建并存储在%UserProfile%目录中才能应用这些配置设置。

在这里插入图片描述

因此,直接在【C:/User/%你的用户名】下创建一个.wslconfig文件,以记事本打开,如参考CSDN教程中添加配置。

[experimental]
autoMemoryReclaim=gradual  
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true

在这里插入图片描述

在这里插入图片描述
然后,打开命令行提示符执行

wsl --shutdown

再重新启动wsl即可。

测试WSL也能科学上网

貌似ping某个网站能不能ping通和能不能科学上网是不充分不必要条件。

不妨下个anaconda,顺便测试一下能连网。

在这里插入图片描述

git clone一下或者wget一个数据集,确实能科学上网。
在这里插入图片描述
在这里插入图片描述

主机VScode访问WSL

甚至没看教程,主机打开vscode,左下角connect手误点错了connect to WSL,直接就连上了
在这里插入图片描述
太方便啦!

看一下WSL装在了哪里,如何占用磁盘空间

参考教程: https://www.jianshu.com/p/22eb4e2e702f

在文件资源管理器直接输入\wsl$

在这里插入图片描述
对应映像文件路径
C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx

在这里插入图片描述

内部的文件结构可以在文件资源管理器-Linux-Ubuntu下看到
在这里插入图片描述

将windows系统文件拷贝到WSL

背景:跨系统读取文件严重影响性能,直接将数据集放到WSL,但不知道如何直接快速的传给WSL。

如文档所述:https://learn.microsoft.com/zh-cn/windows/wsl/setup/environment

在这里插入图片描述
原本C盘的位置在WSL中变为/mnt/c

参考CSDN教程:https://blog.csdn.net/hx2024/article/details/132610015

cp /mnt/c/Users/1/Desktop/datapath.csv /home/zht/

拷贝数据直接通过以上命令即可,亲测连接的硬盘在mnt检测不到,有教程专门解决硬盘直接传输WSL的问题,通过在/mnt下挂载移动硬盘较轻松的解决:

参考CSDN教程:https://blog.csdn.net/u010087338/article/details/134573411

虽然看起来可能每次插入和移除都需要挂载一下。

问题:WSL的ip和windows一致吗?其它电脑可以直接ssh到主机的WSL上吗?

WSL的ip和windows的ip一致吗?

从定义来看,WSL还属于一种特殊的虚拟机,与主机的网络状态应该是共享的:

安装 Linux 发行版时,WSL 2 是默认发行版类型。 WSL 2 使用虚拟化技术在轻量级实用工具虚拟机 (VM) 中运行 Linux 内核。 Linux 发行版作为独立的容器在 WSL 2 托管 VM 内运行。 通过 WSL 2 运行的 Linux 发行版将共享同一网络命名空间、设备树(而非 /dev/pts)、CPU/内核/内存/交换空间、/init 二进制文件,但有自己的 PID 命名空间、装载命名空间、用户命名空间、Cgroup 命名空间和 init 进程。

所以理论上一致,有设置端口的教程,让其它电脑可以ssh到WSL上。

其它电脑可以直接ssh到主机的WSL上吗?

最终还是通过windows自带的远程桌面软件连主机+直接vscode的直连WSL进行操作。

以下绕过远程桌面直接ssh 主机WSL的方式。

有一些关于设置ssh端口转发的教程:https://blog.csdn.net/Jinzhe_01/article/details/131885500

从原理上讲非常合理,且能从一定程度保证windows系统的数据安全。但实践上讲,设置端口和ip对一些新手不太友好,也比较复杂。

以下教程比较简单直接。但亲测无法使用。

https://blog.csdn.net/xiaohan2909/article/details/135286357

该教程序言部分说明的非常清楚:

ssh的原理是直接ssh到windows,但把默认的Powershell替换成WSL的Bash,和直接ssh到某个linux服务器就一致了。
在这里插入图片描述
但在另一台笔记本上ssh 用户名@ip时,失败了 报错:系统无法访问此文件 Connection to xxx closed

  • 35
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Windows Subsystem for Linux 2(WSL2)是Windows 10操作系统中的一个功能,它允许用户在Windows中运行Linux操作系统。对于那些熟悉Linux的开发人员来说,WSL2是一种非常方便的方式来使用他们所熟悉的命令行界面和工具。 在WSL2中,用户可以使用多种方法进行远程访问。其中,其中之一是通过ssh远程登录。 SSH(Secure Shell)是一种安全的网络协议,允许用户在不安全的网络上进行加密通信。通过ssh远程登录WSL2,用户可以像在本地一样使用WSL2,同时还可以利用Windows的GUI界面。 要使用ssh远程登录WSL2,用户需要先启用ssh服务器。在Windows PowerShell或命令提示符中,可以使用以下命令来启动ssh服务器: ``` sudo apt update sudo apt install openssh-server sudo service ssh start ``` 安装和启动过程完成后,可以使用ssh客户端连接到WSL2。在本地电脑上,打开一个终端窗口并输入以下命令: ``` ssh [username]@[IP address of WSL2] ``` 其中,[username]是WSL2中的用户名,[IP address of WSL2]是WSL2的IP地址。默认情况下,WSL2会动态分配IP地址,可以使用以下命令在WSL2中查找其IP地址: ``` ip addr show eth0 | grep inet | awk '{print $2}' | cut -d / -f 1 ``` 使用这种方法进行远程访问,需要确保WSL2和Windows的防火墙设置正确。在Windows防火墙中,需要允许ssh流量通过。在WSL2中,需要允许ssh服务器通过WSL2的防火墙。可以使用以下命令配置WSL2防火墙: ``` sudo ufw allow ssh ``` 使用ssh远程登录WSL2时,还需要注意ssh客户端和服务端之间的证书问题。如果出现证书错误,需要检查证书是否正确配置。 总之,使用ssh远程登录WSL2是一种方便的方式,可让用户像在本地一样使用WSL2。通过配置WindowsWSL2的防火墙,并确保证书正确配置,用户可以安全、可靠地进行远程访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值