WSLSSH 远程连接及宿主机端口转发配置

Posted Xavier Jiezou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WSLSSH 远程连接及宿主机端口转发配置相关的知识,希望对你有一定的参考价值。

引言

Windows 系统因其简单好用的图形化界面而深受广大用户喜爱,但一般科学研究和程序开发,我们都需要使用 Linux 系统的。为此,微软也在 Windows 系统内提供了一个嵌套的子 Linux 系统,用户可以根据需要选择性的开启,这就是 WSL。WSL 在使用 Linux 系统的同时,又能享受部分 Windows 的图形化界面服务,可谓一举双得。

简介

本文介绍如何在 WSL 中开启 SSH 服务,并通过配置端口转发让和宿主机同处一个局域网的计算机能够远程连接。

准备

为方便文章的展开,我们这里做个简单的定义:

  1. 定义安装 Windows 系统的物理机为宿主机
  2. 定义在上述宿主机上开启的 WSL 为虚拟机

教程

虚拟机远程连接配置

  1. 进入 wsl,执行命令 vi /etc/ssh/sshd_config,修改或增加如下配置
Port 22
PasswordAuthentication yes
  1. 重启 ssh 服务,并设置其开机自启动
service ssh restart
service ssh status
systemctl enable ssh
systemctl is-enabled ssh

完成上述配置后,宿主机就可以通过 SSH 连接虚拟机了。以下是连接教程:

  1. 进入 wsl,使用 ifconfig 命令查看虚拟机 IP【可以看到,这里是 172.27.242.144】
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.27.242.144  netmask 255.255.240.0  broadcast 172.27.255.255
        inet6 fe80::215:5dff:fe49:871  prefixlen 64  scopeid 0x20<link>
        ether 00:15:5d:49:08:71  txqueuelen 1000  (Ethernet)
        RX packets 77378  bytes 16287694 (16.2 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4366  bytes 417007 (417.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 4  bytes 336 (336.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4  bytes 336 (336.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  1. 退出 wsl,切换到宿主机,打开 cmd,并执行命令 ssh xuechao@172.27.242.144【其中 xuechao 是我的用户名,172.27.242.144 是上一步获取的 IP】
>ssh xuechao@172.27.242.144
xuechao@172.27.242.144's password:
Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.10.16.3-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Thu Jun 23 21:27:54 CST 2022

  System load:  0.0                Processes:             8
  Usage of /:   1.1% of 250.98GB   Users logged in:       0
  Memory usage: 1%                 IPv4 address for eth0: 172.27.242.144
  Swap usage:   0%


111 updates can be applied immediately.
63 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable


Last login: Thu Jun 23 14:38:13 2022 from 172.27.240.1

现在宿主机已经能够正常连接虚拟机了,接下来是让和宿主机同处一个局域网的其它计算机也能连接上虚拟机,那么就需要配置宿主机的端口转发了。

宿主机端口转发配置

Windows 给我们提供了一个端口转发快捷配置工具:netsh。

  1. 在宿主机上以管理员身份运行 cmd 并执行下方命令
netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=172.27.242.144
  • listenport:宿主机 Windows 监听端口(这里指定为 22)
  • listenaddress:宿主机 Windows 监听 IP 地址(0.0.0.0 表示同一局域网的所有 IP 地址)
  • connectport:WSL2 的 SSH 服务端口(一般默认 22)
  • connectaddress:WSL2 的 SSH 服务 IP 地址(打开 WSL 并通过 ifconfig 命令查看)

上述命令执行完成后,可通过 netsh interface portproxy show v4tov4 查看配置详情。

  1. 还需要配置防火墙出入站规则
netsh advfirewall firewall add rule name=WSL2 dir=in action=allow protocol=TCP localport=22

上述命令执行完成后,可通过 netsh advfirewall firewall show rulename=WSL2 查看配置详情。

结语

好的,你已经完成了所有配置,和宿主机在同一局域网的计算机也能通过 ssh 远程连接宿主机的 wsl 虚拟机了。

参考

https://zhuanlan.zhihu.com/p/372601715

以上是关于WSLSSH 远程连接及宿主机端口转发配置的主要内容,如果未能解决你的问题,请参考以下文章

利用SSH端口转发实现远程访问内网主机远程桌面 建立SSH转发

做隧道转发的 正反

CentOS如何转发所有端口到内网主机(和路由器DMZ一样),包括来源IP和ICMP?

Windows端口转发(Port Forwarding in Windows)

连接虚拟机 模拟远程登录

利用SSH端口转发实现远程访问内网主机远程桌面 SSH免密登陆