赞
踩
我需要用我自己的win11电脑远程控制另外一台win10电脑,下文分别用win11和win10代替两台电脑的名称,来区别远程和被远程的关系
两台电脑均可以实现wsl2的安装,具体安装教程见微软官网教程,或者CSDN其他的安装教程
建议流程:
wsl --install
安装WSL,默认安装的是Ubuntu,没指定版本wsl --list --online
查看Ubuntu版本列表wsl --install -d Ubuntu-20.04
安装本文所用的Ubuntu版本wsl -l -v
查看版本是否安装正确下图显示安装成功:
本问在配置远程连接的过程中,一共出现下面三种报错:
具体原因远程连接没有输入端口号。具体情况是:使用ssh <id>@<win_ip>
进行远程连接出现此报错,然后使用ssh <id>@<win_ip> -p <port2>
成功连接,port2是在端口转发设置中设置的端口号。
这种情况就是网络问题,你要时刻保持被远程电脑的终端是开启的或者是ubuntu是运行的。具体情况:被远程电脑的终端关闭,远程链接不上并出现此报错,重新打开被远程电脑的终端,并运行WSL2的Ubuntu,远程链接成功。
具体原因就是没有设置端口转发,可参考此链接解决,或者按照本文的流程去设置端口转发。
针对上述报错,按照本文章的流程可以避免
两台电脑都需要安装
sudo apt-get update
sudo apt-get install openssh-server
sudo service ssh status
参考链接
wsl2默认的网络模式是NAT模式,不方便和外部主机的互相访问,尤其是当Windows上的容器服务需要暴露给外部主机访问时,因此需要修改网络模式。
上图可以看到wsl2与外界通信需要通过宿主机进行转发,宿主机和wsl2之间存在有一个虚拟局域网,虚拟网卡WSL和虚拟网卡eth0之间由于在同一个网段,所以能够互相通信。wsl2需要访问外部网络时,需要先发往宿主机的虚拟网卡,然后由宿主机的物理网卡将请求转发出去。
获取win的ip在powershell里面输入ipconfig
,获取wsl2的ip在Ubuntu里面输入ifconfig
,结果如下图所示
如果wsl2上存在某个服务,暴露8989端口对外部提供服务。由于wsl没有外网ip,且wsl2的ip是经由宿主机使用网络地址转换技术(NAT)才得以访问局域网的,这隐藏了wsl2,保证了虚拟局域网的安全性,同时也使得局域网其它主机无法直接访问wsl2上的服务。
当前有3种方式可以实现wsl2和局域网内主机的互通,端口转发、 桥接网络 或者 镜像网络。
后两种方法只能在win11电脑中使用,我的被远程电脑是win10,因此我们只使用第一种方法
具体实践如下:
本文使用的端口是 8989 因此需要进行以下配置:
# 更改sshd的配置
sudo vi /etc/ssh/sshd_config
打开文件后会发现很多内容前面都有一个#,我要把需要用的内容的前面的#删除,即取消注释,并做相应的更改。
取消对应注释且更改对应设置如下:
# 端口默认是22,可以改为指定的端口,此处改成8989
Port 8989
ListenAddress 0.0.0.0
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
PasswordAuthentication yes
PermitRootLogin yes
# 重启ssh服务
sudo service ssh restart
# 添加端口转发规则,把wsl_ip替换成你在Ubuntu中ifconfig查找到的的ip。
netsh interface portproxy add v4tov4 listenport=8989 listenaddress=0.0.0.0 connectport=8989 connectaddress=<wsl_ip>
# listenport=<port1> 是指其他机器连接到本机所用的端口,本文章中设置为22
# connectport=<port2> 是指本机连接到本机wsl2所用的端口,本文章中设置为8989
# 格式如下:
# netsh interface portproxy set v4tov4 listenport=<port1> connectport=<port2> connectaddress=127.0.0.1
netsh interface portproxy set v4tov4 listenport=22 connectport=8989 connectaddress=127.0.0.1
# 查看端口转发列表,检查刚刚有无设置成功
netsh interface portproxy show all
# 查看windows正在监听的端口,应该能看到所设定的端口1758正在被LISTENING
netstat -ano -p tcp
我设置好的端口转发列表如下:
我是直接把防火墙都关闭了,所以没有进行这一步的设置,但是这一步的设置也不难,可以参照教程一步一步来。也可以根据代码进行一键设置。
# name可以自己起,localport是上一步中设置的listenport/<port1>
# 也即是其他机器连接到本机所用的端口,本文章中设置为22
netsh advfirewall firewall add rule name="WSL2" dir=in action=allow protocol=TCP localport=22
也可以借助此文的方法进行防火墙的设置
wsl --shutdown
wsl
sudo service ssh restart
ipconfig
获取IP地址# 在宿主机windows10的powershell/cmd/terminal上运行
ipconfig
# 查看有外网连接的网卡的ip,一般是Ethernet
# 带wsl/virtual/default switch的一般是wsl的虚拟网卡
# 在宿主机Ubuntu上面运行
ifconfig
# 查看wsl2的ip
# 这里的ip是宿主机WIN10电脑上的ip
# 在win11机器上的powershell/cmd/terminal上运行
ping <windows IP>
# 发送成功则连通无问题,发送失败,检查两台机器之间的网络(路由器/IP设置等)
# 在宿主机windows10上运行,注意此处<port2>指的是sshd_config中开放的端口
ssh <id>@<wsl2_ip> -p <port2>
# 连接成功则无问题,连接失败可尝试重启甚至重装wsl2的ssh服务
# 在windows上运行:
wsl --shutdown
wsl
# 在wsl2上运行:
sudo service ssh restart
# 在wsl2中运行:
ping baidu.com
# 若能正常显示连接时间,则正常;若连接超时或失败,参考[链接](https://blog.csdn.net/gaopan20080808/article/details/116141003)
打开win11电脑的Ubuntu或者powershell都行,输入:ssh <id>@<win_ip> -p <port2>
ipconfig
命令获取的ip
然后输入密码,和你在Ubuntu中sudo命令需要输入的密码是一样的(这里的密码和你在下载安装Ubuntu时已经设置的账户密码是一致的),出现如下界面,表明连接成功。
首先要在被远程电脑里面配置好anaconda。
启动VScode,添加WSL插件
安装完成后,vscode左侧多出了一个菜单栏,我们点击配置按钮配置远程服务器的地址。选择SSH Targets。我的是汉化版,选择远程(隧道/SSH)
这时候边栏多了远程连接的图标,你可以点加号添加新的连接,也可以点那个齿轮调整config文件(建议)。实际上加号连接的东西也会问你记录在哪个config里面。至于选那个config,第一个就行了(建议),其他的好像也能用。加号的添加方式按照里面的提示填就行了。Host
相当于你的昵称,HostName
是你的服务器ip地址,User
是你服务器上的用户名。还要再添加一个Port
,之前映射的端口。config文件设置好之后,记得ctrl+s保存即可,
Host ubuntu20.04 #你随便取
HostName 192.000.0.000 #填你在win10电脑上面ipconfig获取到的ip即可
Port 8989 # 填之前端口转发设置的<port2>
User xiaoming #ssh <id>@<win_ip> -p <port2>,Ubuntu前面的id
不知道用户名可以通过在powershell里面输入whoami
获取
下面就跟在终端里面远程连接一样
此时你的vscode就工作在远程服务器中了,让我们来打开一个文件夹:
点击后就打开了家目录,此时我们就可以像平常那样直接用vscode的资源管理器来管理我们的文件了。如果我们想要打开远程服务器的shell,那么可以像在本地那样直接在终端中打开就好了:
要想在两台win系统的实现远程连接运行深度学习代码,而又不想直接远程控制电脑桌面,可以通过以下流程实现:
1.在两台电脑上面都安装WSL2,并安装相应版本的Ubuntu系统
2.配置安装anaconda
3.安装ssh
4.配置ssh
5.在被远程电脑上面设置WSL2的端口映射
6.检查远程电脑之间的网络连通性
7.使用ssh <id>@<win_ip> -p <port2>
进行远程连接
局域网ssh连接wsl2配置与问题一站式解决(connection refused)
WSL2设置桥接网络及高级设置
windows下使用vscode远程连接Linux服务器进行开发
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。