台式机改造Linux服务器----Window下的WSL(Windows Subsystem for Linux)方案

问题来源

这么做主要就是因为寝室有台性能还不错的台式机,但是平常又想出去办公,写代码完全用不到图形化界面,所以就想搞一个映射出来,让外面的机子可以通过ssh访问到主机。
然后就是我又想用linux又下不定决心装一下双系统,刚好Window目前子系统方案还算完善(但是坑还是一堆,真的是一堆,以后有钱了,单独买个服务器,主要显卡还想玩玩游戏),所以果断选一个版本安装一下。

主要步骤

1.启用WSL

首先你得启用相关的WSL的配置,具体的操作可以访问以下链接
https://learn.microsoft.com/zh-cn/windows/wsl/install
如果wsl安装好,即可看到如下界面。
在这里插入图片描述
然后根据命令可以直接选取Ubuntu安装,我这里因为开发环境较熟悉Ubuntu20.04所以就安装的Ubuntu20.04
在这里插入图片描述
然后进入WSL当中,输入

wsl

即可进入新安装好的系统
在这里插入图片描述
但是这里你可以看到很坑啊,这里你的访问过程是从window的路径进去的。子系统会把整个当前Windows当作一个挂载(MNT),所以你这时候可能能在这里访问到所有你在windows下安装的驱动,但是在Linux系统目录本身,你就需要再做准备。比如Nvidia的驱动,就需要在Linux系统下建立环境变量的映射。
ok到这一步,如果你不用图形界面的话,基本就完成了。我一般拿来跑程序,所以基本不用图形界面。下面直接配置ssh

配置SSH

这一步如果你是第一次做可能有点坑。
你需要先打开你的sshd_config
在这里插入图片描述
设置

PasswordAuthentication Yes #并激活密码登录ssh
PubkeyAuthentication Yes #激活公钥登录

基本上这个服务器也就我自己在用,so…这里我习惯把两个都打开。主要别人也不知道我做的端口映射。
然后重启ssh

sudo service ssh restart

噢如果你这些命令都报错,麻烦你先安装一下,openSSH服务器

sudo apt install openssh-server

开放端口和IP给客户端使用

继续修改sshd_config

/etc/ssh/sshd_config

...STUFF ABOVE THIS...
Port 2222
#AddressFamily any
ListenAddress 0.0.0.0
#ListenAddress ::

这个设置的意思就是开放2222端口以及绑定到主机的广播地址进行侦听。这里端口可以更换,但是后面我做IP映射的时候你也得给我换咯。
然后重启ssh

sudo service ssh restart

然后这时候你可以使用

ifconfig

命令查看IP就能使用ssh连接了
但是这样每次不是都要打开wsl才能链接服务器嘛?
所以我写了一个python程序,将其绑定到主机的ip

import os
import ctypes, sys


def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False


os.system("wsl ifconfig > output_wsl.txt")
with open("output_wsl.txt","r") as f:
    ipaddr=f.readlines()[1].split(" ")[9]
if is_admin():
    os.system("netsh int portproxy reset all")
    os.system("netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2222 connectaddress={} connectport=2222".format(ipaddr))
    os.system("netsh advfirewall firewall add rule name=\"Open Port 2222 for WSL2\" dir=in action=allow protocol=TCP localport=2222")
    os.system("netsh interface portproxy show v4tov4")
    os.system("wsl sudo service ssh start")
else:
    # Re-run the program with admin rights
    ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
    

所以这里面要读取wsl的IP绑定到台式机IP上
然后就是使用SSH链接他

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值