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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过ssh连接到局域网内Windows下WSL的Ubuntu相关的知识,希望对你有一定的参考价值。

参考技术A 教程开始:

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可能会有其他用。理论上不改也行,我猜。

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

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

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

接下来的操作在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

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

首先在要访问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

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

然后点这

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

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

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

ssh反向连接配置

需求

今天同事提出这样一个需求,我们在客户那放了一台linux服务器,这个服务器在局域网内,但是我们又需要通过ssh连接到此服务器进行调试,但是又不能通过端口映射的方式来操作。所以就需要通过ssh反向连接的方式来进行操作。

ssh反向连接

ssh反向连接即某一台主机在局域网内,但是我们有需要连接它的时候,这个时候可以让这台主机连接到一台公网的服务器,并把它的ssh端口映射到公网这台服务器的某一端口,然后我们连接公网服务器的指定端口既可以连接到局域网这台主机。
这是之前的状态:

这是做了ssh反向连接之后的状态:

配置方法

  1. 在局域网主机执行如下命令
ssh -NfR 2022:localhost:22 root@192.168.200.222    #连接到192.168.200.222这台公网主机,然后把自己的22端口映射到公网主机的2022端口,-N:不执行任何命令,用于进行端口转发;-f:后台执行;-R:将远程主机的某个端口转发到本地的指定端口,如果是特权端口,则只能通过root登录才能转发

注意ssh两个端口位置代表的意义:
ssh -NfR remote_port:localhost:localsshport

  1. 此时在公网主机通过netstat -tnl命令可以看到已经启用了2022端口,但是此端口只监听到127.0.0.1的地址,此时连接还需要先登录到公网服务器,然后再通过公网服务器ssh自己的2022端口才能连接到局域网主机。如果需要直接ssh公网服务器的2022端口则需要再做一次转发:
ssh -fCNL "*:2033:localhost:2022" localhost    #在公网服务器把本地的2022端口映射到2033端口,这样通过直接ssh公网服务器的2033端口既可以连接到局域网主机

改进

实际工作过程中发现通过ssh做转发的时候连接隧道总是断掉,可能端口还在,但是就是连接不上。所以通过autossh代替ssh,autossh可以监听隧道,如果隧道断了会自动重连。

autossh -M 5678 -NR 2022:localhost:22 root@192.168.200.222    #-M 5678表示通过5678端口监听隧道状态,如果隧道关闭则自动重连,-NR表示进行端口转发,autossh不需要-f选项,因为其默认即在后台运行

这样端口转发的问题就解决了。

以上是关于通过ssh连接到局域网内Windows下WSL的Ubuntu的主要内容,如果未能解决你的问题,请参考以下文章

ssh反向连接配置

通过ssh进行远程访问

通过本地网络连接到 WSL2 服务器

如何通过局域网内的另一台电脑(windows Server2012)访问互联网

[翻译]windows下 连接到 bitnami的phpmyadmin

如何从 WSL 连接到本地 Windows SQL Server 实例?