WSL2【一键配置脚本】配置SSH,及Windows宿主机配置好端口转发

背景

如题,这是一个有点tricky的事情,目前网上有很多教你如何配置的文章。

但是随着每次重启计算机,WSL2的nameserver都会变,难道每一次都需要重新配置一遍吗?

我不!

故催生了本文

WSL端

第一次在WSL1/2使用ssh时,需要做如下配置,方便起见综合成了一个一键脚本(只需要配置一次
注意!下文所更改的端口号是 2234,也就是说WSL端监听的端口号是2234,而不是默认的22了。你可以改成你喜欢的数字。

# 在WSL2中运行的一键脚本
sudo apt remove openssh-server -y #卸载 ssh 服务
sudo apt install openssh-server -y # 重装 ssh 服务

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak # 备份
sudo sed -i 's/#Port 22/Port 2234/g' /etc/ssh/sshd_config # 替换目标内容
sudo sed -i 's/#ListenAddress 0.0.0.0/ListenAddress 0.0.0.0/g
' /etc/ssh/sshd_config 
sudo sed -i '/#PermitRootLogin prohibit-password/a\PermitRootLogin yes' sshd_config # 在某行下新增
sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g
' /etc/ssh/sshd_config 

sudo service ssh restart

Windows端(powershell脚本)

每次计算机重启,都会改变WSL2的nameserver,所以每次计算机重启都需要重新配置一次Windows端的转发,即运行一次下述脚本即可。(可以把该脚本的运行加入到Windows的 任务计划 中设置为开机自启)
注意!

  • 下面所设置的 wsl2PORT 端口需要和上面WSL中监听的一致
  • 下面所设置的 wsl2Name 可以在 powershell 中使用 wsl -l 来查看
  • 下面设hi的 listenPORT是windows监听的端口,及远程访问这台Windows电脑时连接的端口
# 获取管理员权限
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]"Administrator")) { 
    $arguments = "& '" + $myinvocation.mycommand.definition + "'"
    Start-Process powershell -Verb runAs -ArgumentList $arguments
    Break
}

$wsl2Name = "ubuntu20-wsl2" # 设置WSL2镜像的名字
$wsl2PORT = 2234 # 设置WSL2中sshd中的端口
$listenPORT = 2224 # 设置windows监听的端口,访问windows该端口将转发给WSL2中的上面那个端口
# 获取WSL2的eth0的IP地址
wsl -d $wsl2Name sudo service ssh --full-restart
$wsl2inet = wsl -d $wsl2Name ifconfig | Select-String -Pattern "inet.*?(?[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}).*?net"
$wsl2ip = $wsl2inet.Matches[0].Groups.Item("ip").Value
# 设置windows到WSL2的端口转发
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=$listenPORT connectaddress=$wsl2ip connectport=$wsl2PORT

# 打开防火墙,放行外部访问本机的流量
netsh advfirewall firewall add rule name=WSL2 dir=in action=allow protocol=TCP localport=$listenPORT

设置Windows任务计划

将使用Powershell执行该脚本加入到Windows的任务计划,以实现开机自启,这样就可以再也不用记得(考虑)这件事了。

把该脚本保存为 .ps1 文件,存放在任意地点。然很找到Windows的任务计划(开始菜单栏搜索“任务计划程序”),添加新的计划,触发器栏设置为开机启动。需要注意的是:

  1. 常规栏,给权限“使用最高权限运行”
  2. 操作栏,程序或脚本处填写 powershell 的位置:开始菜单栏搜索 powershell,右键打开其位置,右键powershell快捷方式打开其位置,将此时找到的powershell位置(应该是 C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe )填写到该处。把本文的 .ps1 脚本文件的路径(比如笔者的是 C:\Application\AutoRun\重置WSL2IP.ps1)填写到下面那个空即可。

完成设置后可以右键任务计划启动试试,如果没问题的话,就可以试着SSH到WSL2上了。
WSL2【一键配置脚本】配置SSH,及Windows宿主机配置好端口转发_第1张图片

最后

祝一切顺利~

你可能感兴趣的:(ssh,服务器,linux)