通过ssh连接到局域网内Windows下WSL的Ubuntu

我曾以为在我的M1 Mac mini 上搞开发足够够了。但实际上,由于操作系统或者芯片架构的原因,有些实验是不能测试的,比如用C写共享内存(教训是浪费很多时间)。

有意思的是我的室友有一台很强的主机:AMD 5900x + 32G运行内存。在编程开发中最重要的就这两个指标啦。我于是萌生用我的Mac mini 连接他的windows下的ubuntu远程开发。
如果你有一台闲置的电脑 Let's go!
校园网是一个局域网,允许通过ssh连接到其他主机。通过windows代理ubuntu的端口来实现。

教程开始:

第一步,配置ubuntu

Ubuntu安装教程如果你不会那应该再去网上搜搜
在windows的ubuntu下操作:

首先更改apt源,这里建议阿里的,官网: http://mirrors.aliyun.com
然后卸载并重新安装ssh-server,因为听说自带的不好用
apt remove openssh-server
apt install openssh-server

然后改监听端口

vim /etc/ssh/sshd_config
取消注释,并更改端口为2222 (也可以按照你喜欢的,能记住就好)
我们姑且把端口号叫ggport (随便取的名字,为了后面能够引用)
之所以要改端口,是因为ubuntu的22可能会有其他用。理论上不改也行,我猜。


然后强58行这句取消注释,再手动输入59这一行
首行带井号的就是注释,具体意思通过直译不难理解

按ESC键,键盘输入:wq保存退出
然后重启ssh服务,使之生效 service ssh restart

到目前,其他电脑依旧连不到这台windows的ubuntu,需要设置一个代理

还是在ubuntu环境,输入apt install net-tools
然后输入ifconfig,注意红框的内容

图片.png

可能我同学的主机有连接网线,而且还能同时用无线wifi,所以会有两个
所以随便试试,我从小到大试,第一个就成功了,也有可能两个都可以,但是,一定要选形如192.168.*.*这样的inet
把记住的这个ipv4地址姑且叫做 ggip(随便取的名字,为了后面能够引用)

接下来的操作在Windows上运行:
管理员权限打开PowerShell,将windows的2222端口转发到ubuntu,输入:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2222 connectaddress=[ggip] connectport=[ggport]
输入的时候记得替换[ggip] [ggport] 为上面提到的值,跟前面的0.0.0.0一样不要带中括号[]

然后在windows防火墙开启入站规则,输入命令:
netsh advfirewall firewall add rule name=WSL2 dir=in action=allow protocol=TCP localport=2222

坦白地讲,我不喜欢Window的Shell,难用。不过知道能复制粘贴就可以凑合用。

然后还是在Powershell中,查看你的IP地址,输入:
ipconfig
区别于Linux下的ifconfig

找到你的ip地址,我的是10.开头的,现在不方便截图

然后局域网内其他电脑,可以通过ssh连接
ssh username@ip -p 2222

  • username替换为ubuntu的用户名
  • ip替换为Windows局域网的ip,在我这是10.开头的
  • 后面要输入ubuntu用户的密码

通过rsa ssh来无密码登陆

在这里我简要的说一下如何操作

首先在要访问ubuntu的机器里,用户目录下如果没有隐藏文件夹.ssh的话,执行:
ssh-keygen -t rsa
一路回车
然后终端进入~/.ssh文件夹下,用scp将公钥(有.pub后缀的文件)拷贝到装有ubuntu的windows里
scp -P 2222 ./id_rsa.pub username@ip:/home/
输入密码,如果有传输过程,比如网速啥的,说明成功,没有的话自己检查一下
然后ubuntu终端内,cd /home
然后将.pub文件追加到当前用户家目录的 .ssh/
cat id_rsa.pub >> ~/.ssh/authorized_keys

然后就是VScode远程连接其他windows的WSL(Ubuntu)

首先安装微软自己出品的插件 Remote - SSH


Remote - SSH

然后点这


vscode.png

弹出来一个框,选第一个就好了
然后按照这个格式填个配置

// 模版
Host Name
    Hostname [填ip地址]
    User [填用户名]
    Port [填端口]
    IdentityFile [私钥文件]

// 比如我的
Host kun
    Hostname 10.117.66.66
    User root
    Port 2222
    IdentityFile "/Users/name/.ssh/id_rsa-remote-ssh"

私钥文件就是在家目录~下,没有.pub后缀的文件,注意跟你上传到ubuntu的公钥要互相匹配
然后点上面vscode.png里面 右边中间的有+号的按钮就可以连接啦!

有问题可以在评论区问我。

你可能感兴趣的:(通过ssh连接到局域网内Windows下WSL的Ubuntu)